Java功能優化威望指南-讀書筆記(五)-JVM功能調優-吞吐量。本站提示廣大學習愛好者:(Java功能優化威望指南-讀書筆記(五)-JVM功能調優-吞吐量)文章只能為提供參考,不一定能成為您想要的結果。以下是Java功能優化威望指南-讀書筆記(五)-JVM功能調優-吞吐量正文
吞吐量是指,使用順序的TPS: 每秒多少次事務,QPS: 每秒多少次查詢等功能目標。
吞吐量調優就是增加渣滓搜集器耗費的CPU周期數,從而將更多的CPU周期用於執行使用順序。
CMS包括Minor GC所帶來的開支應該小於10%,假如渣滓搜集的開支在3%或更少,闡明經過調優吞吐量,提升功能的空間就極端無限了。
可用的調優辦法如下:
1. 增大重生代空間,以降低Minor GC頻率,增加CPU周期占用;
2. 添加老年代空間,以降低CMS頻率,並可以增加老年代內存碎片;
3. 優化CMS周期的啟動條件,盡能夠在較晚的時分停止;
總的來說,就是增加渣滓搜集占用的CPU周期。
這裡說的ParallelGC是指開啟了上面兩個JVM參數
-XX:+UseParallelGC
-XX:+UseParallelOldGC
對ParallelGC調優的目的是盡能夠防止發作Full GC,這就需求優化對象老化頻率,可以調整Survivor空間完成對對象老化的優化。
運用ParallelGC時,渣滓搜集的開支應小於5%,假如曾經增加到1%甚至更少,那根本上就曾經到達了極限。
ParallelGC默許可以自動調整Survivor空間,大局部使用用自動調整曾經可以,對要求比擬高的使用就需求封閉自動調整,停止手動調整。
為JVM添加上面兩個參數,只針對ParallelGC有用:
-XX:-UseAdaptiveSizePolicy //封閉自順應調整 -XX:+PrintAdaptiveSizePolicy //打印詳細Survivor空間占用日志
如上面日志:
2016-12-11T16:44:03.653+0800: 5.042: [GC (Allocation Failure) AdaptiveSizePolicy::update_averages: survived: 10464720 promoted: 1096456 overflow: true
survived:“TO”Survivor空間占用大小;
promoted: 重生代提升至老年代的對象大小;
overflow:能否有Survivor空間的對象溢出到老年代;
從下面的日志可以看出,Minor GC後重生代存活對象大小10M,由於沒有設置-XX:TargetSurvivorRatio,默許Survivor空間占用比率為50%,
所以Survivor空間應為20M。
找到波動態下Full GC之間一切Minor GC中最大的存活對象大小,然後就可以調整Survivor空間大小。
原JVM參數如下:
-Xmx1024m –Xms1024m –Xmn50m -XX:SurvivorRatio=3
可以計算出:原Survivor空間:10M,原Eden空間:30M
如今增大Survivor空間到20M
保證Eden空間不變,則重生代大小為70M;
70M / (SurvivorRatio + 2)=20M,所以SurvivorRatio=1.5
保證老年代空間不變,則Java堆大小調整為1044M
所以最後JVM參數為:
-Xmx1044m -Xms1044m -Xmn70m -XX:SurvivorRatio=1.5
假如Java堆大小曾經不能再增大,可以計算下Minor GC後,存活對象的最小值、最大值、均勻值,假如不存在大幅動搖,
可以嘗試進步Survivor空間的占用百分比-XX:TargetSurvivorRatio=<n>,其默許為50%。
-XX:ParallelGCThreads
並行渣滓搜集器的線程數,建議搜集線程數設置的小於默許值,否則少量GC線程會影呼應用功能