目录


​tomcat配置优化​

​部署安装tomcat8​

​配置tomcat8​

​禁用AJP连接​

​设置tomcat线程池(执行器)​

​tomcat的3种运行模式​

​使用Apache Jmeter进行测试​

​下载安装jmeter​

​使用步骤 ​

​调整tomcat参数进行优化​

​调整JVM参数进行优化​

​设置并行垃圾回收器​

​查看GC日志文件​

​调整年轻代大小​

​查看GC日志​

​设置G1垃圾收集器​

​小结​


JVM 调优实战--tomcat8优化_tomcat

tomcat配置优化

部署安装tomcat8

JVM 调优实战--tomcat8优化_垃圾收集器_02

配置tomcat8

JVM 调优实战--tomcat8优化_线程池_03

JVM 调优实战--tomcat8优化_垃圾收集器_04

JVM 调优实战--tomcat8优化_垃圾收集器_05

禁用AJP连接

JVM 调优实战--tomcat8优化_线程池_06

JVM 调优实战--tomcat8优化_垃圾收集器_07

JVM 调优实战--tomcat8优化_线程池_08

JVM 调优实战--tomcat8优化_线程池_09

JVM 调优实战--tomcat8优化_线程池_10


重启tomcat,即可生效。

查看禁用后的效果:


JVM 调优实战--tomcat8优化_tomcat_11

设置tomcat线程池(执行器)


频繁地创建线程会造成性能浪费,所以使用线程池来优化:


JVM 调优实战--tomcat8优化_垃圾收集器_12

JVM 调优实战--tomcat8优化_线程池_13

JVM 调优实战--tomcat8优化_垃圾收集器_14

tomcat的3种运行模式

JVM 调优实战--tomcat8优化_tomcat_15


tomcat8之前的版本用的是BIO,推荐使用NIO,tomcat8中有最新的NIO2,速度更快,建议使用NIO2。


使用Apache Jmeter进行测试


将web应用部署到服务器之后,使用jmeter对其进行压力测试。


JVM 调优实战--tomcat8优化_垃圾收集器_16

下载安装jmeter

JVM 调优实战--tomcat8优化_tomcat_17

JVM 调优实战--tomcat8优化_线程池_18

使用步骤 


设置中文:


JVM 调优实战--tomcat8优化_垃圾收集器_19


创建并保存测试用例:


JVM 调优实战--tomcat8优化_线程池_20


添加线程组,使用线程模拟用户的并发:


JVM 调优实战--tomcat8优化_垃圾收集器_21

JVM 调优实战--tomcat8优化_tomcat_22

JVM 调优实战--tomcat8优化_线程池_23

JVM 调优实战--tomcat8优化_tomcat_24

JVM 调优实战--tomcat8优化_线程池_25

JVM 调优实战--tomcat8优化_tomcat_26

JVM 调优实战--tomcat8优化_垃圾收集器_27

调整tomcat参数进行优化


tomcat不进行任何参数调整时,吞吐量为73次/秒,接下来进行参数优化:

①禁用AJP服务:吞吐量提升至117.6

JVM 调优实战--tomcat8优化_垃圾收集器_28

②设置线程池:单纯提升线程数量不一定能一直提升性能。

JVM 调优实战--tomcat8优化_垃圾收集器_29

JVM 调优实战--tomcat8优化_垃圾收集器_30

JVM 调优实战--tomcat8优化_线程池_31

JVM 调优实战--tomcat8优化_tomcat_32

③设置nio2的运行模式:tomcat8默认的是nio的模式

JVM 调优实战--tomcat8优化_线程池_33


调整JVM参数进行优化


接下来,通过调整JVM参数进行优化,其他tomcat参数与上面的保持一致:

最大线程数设置为500,启用nio2运行模式。


设置并行垃圾回收器

JVM 调优实战--tomcat8优化_tomcat_34

JVM 调优实战--tomcat8优化_垃圾收集器_35


vi catalina.sh

将jvm参数添加进去--设置年轻代和老年代的垃圾收集器均为ParallelGC并行垃圾收集器。不设置jdk8默认也是使用ParallelGC:

JVM 调优实战--tomcat8优化_垃圾收集器_36


JVM 调优实战--tomcat8优化_tomcat_37


修改完catalina.sh文件后,重启tomcat:

sh startup.sh && tail -f ../logs/catalina.out


JVM 调优实战--tomcat8优化_tomcat_38


gc日志存放目录: apache-tomcat-8.5.34/logs/gc.log 


JVM 调优实战--tomcat8优化_tomcat_39

JVM 调优实战--tomcat8优化_垃圾收集器_40


测试结果比较接近,因为jdk8默认使用的也是ParallelGC垃圾收集器。


查看GC日志文件


apache-tomcat-8.5.34/logs/gc.log 文件上传到gceasy.io查看gc中是否存在问题:


JVM 调优实战--tomcat8优化_线程池_41

JVM 调优实战--tomcat8优化_垃圾收集器_42


只有在堆内存空间不足时才会触发FGC,FGC次数过高说明堆内存大小设置不合理。 


JVM 调优实战--tomcat8优化_垃圾收集器_43

JVM 调优实战--tomcat8优化_垃圾收集器_44

调整年轻代大小


vi catalina.sh

对比下之前的配置,将初始堆大小,年轻代大小均进行提升--


JVM 调优实战--tomcat8优化_垃圾收集器_45

JVM 调优实战--tomcat8优化_垃圾收集器_46

查看GC日志

JVM 调优实战--tomcat8优化_垃圾收集器_47

JVM 调优实战--tomcat8优化_线程池_48


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


设置G1垃圾收集器


理论上而言,设置为G1垃圾收集器,性能是会提升的。但是会受制于多方面的影响,也不一定绝对有提升。


JVM 调优实战--tomcat8优化_线程池_49


vi cataliina.sh文件:


JVM 调优实战--tomcat8优化_线程池_50

JVM 调优实战--tomcat8优化_tomcat_51

小结


通过上述的测试,可以总结出,对tomcat性能优化就是需要不断地进行参数调整,然后测试结果,可能会调优也可能会调差,这时就需要借助于gc的可视化工具来看gc的情况。再帮助我们作出决策应该调整哪些参数。