1. 程式人生 > >效能案例-JVM頻繁full GC 問題(JVM引數優化)

效能案例-JVM頻繁full GC 問題(JVM引數優化)

說明:這個是兩三年前的一個案例,剛剛新開發的服務,jdk版本為1.7

1、問題描述

某服務執行緒十幾分鍾就出現一次full GC現象,需要優化(其他4個服務也存在類似問題)

2、問題原因

jvm 永久帶未配置(預設值過小)

3、測試過程

以xx_core_service-1.0.0.jar執行緒為例,執行過程中出現full GC現象,需要優化

4、優化建議

調整JVM引數。當前情況,已以xxx_core_service-1.0.0.jar為例,在增加perm引數後( -Xmn96m -XX:PermSize=32m -XX:MaxPermSize=32m),驗證測試通過。

5、驗證結果

增加 -Xmn96m -XX:PermSize=32m -XX:MaxPermSize=32m" 後驗證結果如下

(觀察一個小時):

堆記憶體使用情況:本時間段內,未出現full GC情況

Perm區記憶體使用情況如下

觸發JVM進行Full GC的情況(本案例是第3種情況)

1、System.gc()方法的呼叫

2、老年代空間不足

3、永生區空間不足

Permanet Generation中存放的為一些class的資訊、常量、靜態變數等資料,當系統中要載入的類、反射的類和呼叫的方法較多時,Permanet Generation可能會被佔滿,為避免Perm Gen佔滿造成Full GC現象,可採用的方法為增大Perm Gen空間或轉為使用CMS GC。

4、CMS GC時出現promotion failed和concurrent mode failure

5、統計得到的Minor GC晉升到舊生代的平均大小大於老年代的剩餘空間

6、堆中分配很大的物件

https://zhuanlan.zhihu.com/p/30234715