記一次線上生産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
https://www.jianshu.com/p/8d8aef212b25