记一次线上生产JVM调优过程。
一. 线上问题,no BB,看图
应用堆内存使用情况如下图:
应用youngGC如下图:
这里没有给出fullGC的图片,基本上每一小时一次fullGC。
正常应用堆内存使用情况如下
正常应用youngGC情况
二. 分析
正常应用youngGC比较频繁,每次时间短;有问题应用youngGC次数少,每次GC时间长;且fullGC均能回收系统内存;
怀疑新生代和老年代的比例或新生代eden和Survivor比例不合理导致。可以使用-XX:NewRatio和 -XX:SurvivorRatio调整
-XX:NewRatio=2 :新生代和年老代的堆内存占用比例, 例如2表示新生代占年老代的1/2,占整个堆内存的1/3
-XX:SurvivorRatio=8: Eden与Survivor的占用比例。例如8表示,一个survivor区占用 1/8 的Eden内存,即1/10的新生代内存,为什么不是1/9?因为我们的新生代有2个survivor,即S0和S1。所以survivor总共是占用新生代内存的 2/10,Eden与新生代的占比则为 8/10
三. 结论
经过多次测试,设置-XX:NewRatio=4 应用内存得到改善,默认是-XX:NewRatio=2,堆内存使用如下图,调整后堆内存使用在1G以下。
欢迎探讨!
参考
https://www.cnblogs.com/langtianya/p/3898760.html
https://blog.csdn.net/sunny243788557/article/details/52796904