應(yīng)該分為?
1.系統(tǒng)層面: 合理的 openfile數(shù) 用 -server模式 打開(kāi)limit限制
2.代碼層面的,盡量用局部變量,用小而美的對(duì)象
3. 用? jstat -gcutil 獲取 Minor GC,Full GC的平均值? 如果GC執(zhí)行時(shí)間滿足下列所有條件,就沒(méi)有必要進(jìn)行GC優(yōu)化了
Minor GC執(zhí)行非常迅速(50ms以內(nèi))
Minor GC沒(méi)有頻繁執(zhí)行(大約10s執(zhí)行一次)
Full GC執(zhí)行非常迅速(1s以內(nèi))
Full GC沒(méi)有頻繁執(zhí)行(大約10min執(zhí)行一次)
查看JVM所有參數(shù):
jinfo -flags pid
jstat -gcutil pid 200 20
這個(gè)命令意思就是每隔200ms輸出pid?的gc情況,一共輸出20次

從應(yīng)用程序啟動(dòng)到采樣時(shí)發(fā)生 Young GC 的次數(shù))和YGCT(從應(yīng)用程序啟動(dòng)到采樣時(shí) Young GC 所用的時(shí)間(秒)),計(jì)算YGCT/YGC會(huì)得出,平均每次新生代的GC耗時(shí)50ms,這是一個(gè)很小的數(shù)字,通過(guò)這個(gè)結(jié)果可以看出,我們大可不必關(guān)注新生代GC對(duì)GC性能的影響。
現(xiàn)在來(lái)看一下FGC( 從應(yīng)用程序啟動(dòng)到采樣時(shí)發(fā)生 Full GC 的次數(shù))和FGCT(從應(yīng)用程序啟動(dòng)到采樣時(shí) Full GC 所用的時(shí)間(秒)),計(jì)算FGCT/FGC會(huì)得出,平均每次老年代的GC耗時(shí)19.68s。有可能是執(zhí)行了三次Full GC,每次耗時(shí)19.68s,也有可能是有兩次只花了1s,另一次花了58s。不管是哪一種情況,GC優(yōu)化都是很有必要的。
4.? 從配置? 垃圾回收器,最大堆 最小堆, 新生代和老年代的比例? 分別壓測(cè)周內(nèi) 運(yùn)行的 情況來(lái) 選擇合適的 條件
Case 1:?-XX:+UseParallelGC -Xms1536m -Xmx1536m -XX:NewRatio=2
Case 2:?-XX:+UseParallelGC -Xms1536m -Xmx1536m -XX:NewRatio=3
Case 3:?-XX:+UseParallelGC -Xms1g -Xmx1g -XX:NewRatio=3
Case 4:?-XX:+UseParallelOldGC -Xms1536m -Xmx1536m -XX:NewRatio=2
Case 5:?-XX:+UseParallelOldGC -Xms1536m -Xmx1536m -XX:NewRatio=3
Case 6:?-XX:+UseParallelOldGC -Xms1g -Xmx1g -XX:NewRatio=3
準(zhǔn)備6臺(tái)機(jī)器, 壓測(cè)2-3天,看下那種表現(xiàn)好,就用那種 配置?
