JVM调优实践-Tomcat调优

调优几个重要指标

GC频率

提升每次GC的效率

准备环节

jmeter的配置


未压测前JVM配置

工程未调优前配置

-Xms400m

-Xmx400m

-XX:PermSize=64m

-XX:MaxNewSize=128m

-XX:MaxPermSize=128m

-XX:+PrintGCTimeStamps

-XX:+PrintGCDetails

-Xloggc:gc.log

环境配置

Tomcat在台式机上

每次压测前清除gc.log,重启Tomcat

Jmeter 200线程,在tomcat启动2分钟后开始执行,持续20分钟


结果分析

通过GC日志分析GC频率

根据Jmeter结果记录吞吐率,平均响应速度,等

借助工具

Jmeter,对tomcat进行压力测试,模拟用户请求

Java VisualVM,JVM进行性能监控,做时间记录,CPU使用情况记录。

Gchisto GC日志分析工具


压测过程

第一次压测

压测前通过VisualVM看到的jvm图表


压测20分钟后


GC日志



新生代GC次数:1602

Full GC次数:   38

Jmeter结果


第二次压测

增大堆内存,新生代内存,以减小GC频率

-Xms600m

-Xmx600m

-XX:PermSize=128m

-XX:MaxNewSize=200m

-XX:MaxPermSize=128m

-XX:+PrintGCTimeStamps

-XX:+PrintGCDetails

-Xloggc:gc.log

压测后GC日志



JVM图表


Jmeter结果图表


第三次压测

减少每次GC的时间

-Xms600m

-Xmx600m

-XX:PermSize=128m

-XX:MaxNewSize=200m

-XX:MaxPermSize=128m

-XX:+PrintGCTimeStamps

-XX:+PrintGCDetails

-Xloggc:gc.log

-Xverify:none

-XX:+UseConcMarkSweepGC                     使用CMS垃圾收集器               

-XX:ParallelCMSThreads=8                       并行的CMS线程数为8

-XX:+UseCMSCompactAtFullCollection  FullGC的时候压缩内存

-XX:CMSFullGCsBeforeCompaction=0    每执行多少次FullGC,执行一次内存压缩

-XX:+UseParNewGC                                     新生代回收也用并行回收

GC日志



JVM图表


Jmeter压测结果


结论


通过调整JVM新生代与老年代内存占比与大小,还有GC的回收器,可以增加程序的吞吐,提高程序的处理能力。


原文地址:https://www.cnblogs.com/uwannerme/p/5692828.html