• 总结tomcat优化方法


    1 jvm垃圾回收器优化设置

    优化调整Java 相关参数的目标: 尽量减少FullGC和STW

    通过以下选项可以单独指定新生代、老年代的垃圾收集器

    • -server 指定为Server模式,也是默认值,一般使用此工作模式
    • -XX:+UseSerialGC
      • 运行在Client模式下,新生代是Serial, 老年代使用SerialOld
    • -XX:+UseParNewGC
      • 新生代使用ParNew,老年代使用SerialOld
    • -XX:+UseParallelGC
      • 运行于server模式下,新生代使用Serial Scavenge, 老年代使用SerialOld
    • -XX:+UseParallelOldGC
      • 新生代使用Paralell Scavenge, 老年代使用Paralell Old
      • -XX:ParallelGCThreads=N,在关注吞吐量的场景使用此选项增加并行线程数
    • -XX:+UseConcMarkSweepGC
      • 新生代使用ParNew, 老年代优先使用CMS,备选方式为Serial Old
      • 响应时间要短,停顿短使用这个垃圾收集器
      • -XX:CMSInitiatingOccupancyFraction=N,N为0-100整数表示达到老年代的大小的百分比多少触发回收
      • 默认68
      • -XX:+UseCMSCompactAtFullCollection 开启此值,在CMS收集后,进行内存碎片整理
      • -XX:CMSFullGCsBeforeCompaction=N 设定多少次CMS后,进行一次内存碎片整理
      • -XX:+CMSParallelRemarkEnabled 降低标记停顿

    范例:

    -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSCompactAtFullCollection -
    
    XX:CMSFullGCsBeforeCompaction=5
    
    • 1
    • 2
    • 3

    范例: 查看默认模式

    [root@centos8 ~]#java |& grep '-server'
    	-server to select the "server" VM
    			The default VM is server.
    [root@centos8 ~]#tail -n 2 /usr/local/jdk/jre/lib/amd64/jvm.cfg
    -server KNOWN
    -client IGNORE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    范例: 指定垃圾回收设置

    #将参数加入到bin/catalina.sh中,重启观察Tomcat status。老年代已经使用CMS
    [root@tomcat ~]#vim /usr/local/tomcat/bin/catalina.sh
    ......
    # OS specific support. $var _must_ be set to either true or false.
    
    JAVA_OPTS="-server -Xmx512m -Xms128m -XX:NewSize=48m -XX:MaxNewSize=200m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5"
    
    cygwin=false
    darwin=false
    os400=false
    .......
    [root@tomcat ~]#systemctl restart tomcat
    [root@tomcat ~]#ps aux |grep tomcat
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    自己实验:指定垃圾回收算法为CMS,

    [root@t1:~]#
    vim  /usr/local/tomcat/bin/catalina.sh 
    # OS specific support.  $var _must_ be set to either true or false.
    JAVA_OPTS="-server -Xmx512m -Xms128m -XX:NewSize=48m -XX:MaxNewSize=200m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5"
    cygwin=false
    darwin=false
    os400=false
    hpux=false
    case "`uname`" in
    CYGWIN*) cygwin=true;;
    Darwin*) darwin=true;;
    OS400*) os400=true;;
    HP-UX*) hpux=true;;
    esac
    # resolve links - $0 may be a softlink
    
    [root@t1:~]#
    systemctl restart tomcat
    [root@t1:~]#
    ps aux|grep java
    root       17831  132  8.4 2972260 154376 ?      Sl   13:09   0:06 /usr/local/jdk/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xmx512m -Xms128m -XX:NewSize=48m -XX:MaxNewSize=200m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=5 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
    root       17849  0.0  0.0  12136  1052 pts/1    R+   13:09   0:00 grep --color=auto java
    #显示出指定的算法为cms
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2.tomcat优化

    2.1 内存空间优化

    JAVA_OPTS="-server -Xms4g -Xmx4g -XX:NewSize= -XX:MaxNewSize= "
    
    -server:服务器模式
    -Xms:堆内存初始化大小
    -Xmx:堆内存空间上限
    -XX:NewSize=:新生代空间初始化大小
    -XX:MaxNewSize=:新生代空间最大值
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    生产案例:

    [root@centos8 ~]#vim /usr/local/tomcat/bin/catalina.sh
    JAVA_OPTS="-server -Xms4g -Xmx4g -Xss512k -Xmn1g -XX:CMSInitiatingOccupancyFraction=65 -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods"
    
    #一台tomcat服务器并发连接数不高,生产建议分配物理内存通常4G到8G较多,如果需要更多连接,一般会利用虚拟化技术实现多台tomcat
    
    • 1
    • 2
    • 3
    • 4

    2.2 线程池调整

    [root@centos8 ~]#vim /usr/local/tomcat/conf/server.xml
    ......
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
    redirectPort="8443" />
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5

    常用属性:

    • connectionTimeout :连接超时时长,单位ms
    • maxThreads:最大线程数,默认200
    • minSpareThreads:最小空闲线程数
    • maxSpareThreads:最大空闲线程数
    • acceptCount:当启动线程满了之后,等待队列的最大长度,默认100
    • URIEncoding:URI 地址编码格式,建议使用 UTF-8
    • enableLookups:是否启用客户端主机名的DNS反向解析,缺省禁用,建议禁用,就使用客户端IP就行
    • compression:是否启用传输压缩机制,建议 “on”,CPU和流量的平衡
      • compressionMinSize:启用压缩传输的数据流最小值,单位是字节
        • compressableMimeType:定义启用压缩功能的MIME类型text/html, text/xml, text/css, text/javascript

    在这里插入图片描述

  • 相关阅读:
    Swift 单元测试
    AI入门指南(二):算法、训练、模型、大模型是什么?
    JVM性能调优的6大步骤,及关键调优参数详解
    286节---------6月22日
    PyTorch深度学习框架
    深入思考JAVA虚拟机,实现从0到1的突破
    《持续交付:发布可靠软件的系统方法》- 读书笔记(十五)
    python+Vue心理健康网站django
    wujie初使用--部署篇
    IDEA插件开发(20)--Editor Components
  • 原文地址:https://blog.csdn.net/aa896517050/article/details/125903173