zoukankan      html  css  js  c++  java
  • Tomcat8优化--调整tomcat参数和JVM参数进行优化

    一、调整tomcat参数

    1、禁用APJ服务

    ①、修改conf目录下的service.xml文件

    #关闭服务
    ./shutdown.sh
    
    #切换到conf目录
    cd ../conf/
    #编辑server.xml文件
    vi server.xml

      

     启动服务:

    #切换目录
    cd ../bin
    
    #启动服务
    ./startup.sh

    ②、再次运行查看报告 

    禁用前:

      

     禁用后:

       

      可以看到,禁用AJP服务后,吞吐量有所提升;

      当然了,测试不一定准确,需要多几次测试才能看出是否有所提升;

    2、设置线程池

      通过设置线程池,调整线程池相关的参数进行测试tomcat的性能。

    ①、最大线程数为500,初始为50

    #关闭服务
    ./shutdown.sh
    
    #切换到conf目录
    cd ../conf/
    #编辑server.xml文件
    vi server.xml

    修改内容:

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true"/>

      

     启动服务:

    #切换目录
    cd ../bin
    
    #启动服务
    ./startup.sh

    ②、再次运行查看报告 

    修改前:

      

    修改后: 

      

      可以看到,性能有所提升

    ③、最大线程数为1000,初始为200 

    #关闭服务
    ./shutdown.sh
    
    #切换到conf目录
    cd ../conf/
    #编辑server.xml文件
    vi server.xml

    修改内容:

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="200" prestartminSpareThreads="true"/>

      

     启动服务:

    #切换目录
    cd ../bin
    
    #启动服务
    ./startup.sh

    ④、再次运行查看报告 

    修改前:

      

    修改后: 

      

     可以看到,性能有所提升,但是单纯靠提升线程数量是不能一直得到性能提升的

    ⑤、设置最大等待队列数 

    #关闭服务
    ./shutdown.sh
    
    #切换到conf目录
    cd ../conf/
    #编辑server.xml文件
    vi server.xml

    修改内容:

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="200" prestartminSpareThreads="true" 
      maxQueueSize="100"/>

      

     启动服务

    #切换目录
    cd ../bin
    
    #启动服务
    ./startup.sh

    ⑥、再次运行查看报告 

    修改前:

      

    修改后:

      

    结论:响应时间、吞吐量这2个指标需要找到平衡才能达到更好的性能。

    2、设置nio2的运行模式

    #关闭服务
    ./shutdown.sh
    
    #切换到conf目录
    cd ../conf/
    #编辑server.xml文件
    vi server.xml

     修改内容:

        <Connector executor="tomcatThreadPool" port="8080"         protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000"
                   redirectPort="8443" />

      

     启动服务:

    #切换目录
    cd ../bin
    
    #启动服务
    ./startup.sh

    再次运行查看报告 :

      

    可以看到,平均响应时间有缩短,吞吐量有提升,可以得出结论:nio2的性能要高于nio

    二、调整JVM参数

      测试通过jvm参数进行优化,为了测试一致性,依然将最大线程数设置为500,启用nio2运行模式。

    1、设置并行垃圾回收器 

    #关闭服务
    ./shutdown.sh
    
    #修改文件
    vi catalina.sh

    修改的内容:

    JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms64m -Xmx512m -XX:+PrintGCDetails 
      -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:../logs/gc.log
    "

      

     启动服务:

    ./startup.sh 

    再次运行查看报告 :

       

    2、查看gc日志文件

      将gc.log文件上传到gceasy.io查看gc中是否存在问题

     问题一:

      

      在关键指标中可以看出,吞吐量表现不错,但是gc时,线程的暂停时间稍有点长。

     问题二:

      

     通过GC的统计可以看出:
      年轻代的gc有70次,次数稍有多,说明年轻代设置的大小不合适需要调整
      FullGC有8次,说明堆内存的大小不合适,需要调整

     问题三:

      

      从GC原因的可以看出,年轻代大小设置不合理,导致了多次GC。

    3、调整年轻代大小

    #关闭服务
    ./shutdown.sh
    
    #修改文件
    vi catalina.sh

    修改的内容:

    JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms128m -Xmx1024m -XX:NewSize=64m -XX:MaxNewSize=256m 
      -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:../logs/gc.log
    "

      

      将初始堆大小设置为128m,最大为1024m
      初始年轻代大小64m,年轻代最大256m 

     启动服务:

    ./startup.sh 

    再次运行查看报告 :

      

    查看GC报告:

      
      
      可以看到,GC次数明显减少,说明调整有效

    4、设置G1垃圾回收器

    #关闭服务
    ./shutdown.sh
    
    #修改文件
    vi catalina.sh

    修改的内容:

    JAVA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms128m -Xmx1024m -XX:+PrintGCDetails 
      -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:../logs/gc.log
    "

       

     启动服务:

    ./startup.sh 

    再次运行查看报告 :

       

    查看GC报告:

       

    可以看到,吞吐量有所提升,响应时间也有所缩短。

    5、小结

      通过上述的测试,可以总结出,对tomcat性能优化就是需要不断的进行调整参数,然后测试结果,可能会调优也可能会调差,这时就需要借助于gc的可视化工具来看gc的情况,再做出决策应该调整哪些参数
  • 相关阅读:
    rsync介绍和配置自动同步
    haproxy 配置httpd和httpds负载均衡
    haproxy配置及使用
    lvs之搭建NAT模式的HTTPS负载集群
    lvs配置之DR模式
    lvs配置之NAT模式
    LVS集群
    lvs四种工作模式,负载调度的介绍
    zabbix页面介绍
    zabbix自定义监控进程、日志、mysql主从
  • 原文地址:https://www.cnblogs.com/Zzzzn/p/12450393.html
Copyright © 2011-2022 走看看