我们的系统是单台tomcat部署的To B 的web应用。默认使用JDK8,再生产活动中并发量高的时候出现系统反应延迟现象。需要对系统进行优化,在jvm调优过程中发现了一些问题:
通过jstat -gc 发现系统在平凡的发生full gc。导致jvm系统大幅下降
jinfo -flags 查看系统参数配置
如果想减少Full GC的发生,我们就需要让对象垃圾基本在Minor GC的时候回收掉。这样就需要增加年轻代的空间,将老年代的空间给的小一些。同时parNew和CMS垃圾收集器组合使用,让垃圾回收效率最大化。
经过尝试,选择出了适合系统的调优参数设置
-Xms1536M -Xmx1536M -Xmn512M -Xss256K -XX:SurvivorRatio=6 -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=95 -XX:+UseCMSInitiatingOccupancyOnly
设置完后,再看下系统的垃圾收集情况,FullGC基本不再发生
小结:该参数设置不一定会适合其它系统,需要根据服务器情况和使用JDK版本进行调优测试,找出适合自己系统的JVM参数设置