記一次線上生產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