Java性能優化權威指南-讀書筆記(五)-JVM性能調優-吞吐量

吞吐量是指,應用程序的TPS: 每秒多少次事務,QPS: 每秒多少次查詢等性能指標。html

吞吐量調優就是減小垃圾收集器消耗的CPU週期數,從而將更多的CPU週期用於執行應用程序。java

CMS吞吐調優

CMS包括Minor GC所帶來的開銷應該小於10%,若是垃圾收集的開銷在3%或更少,說明經過調優吞吐量,提高性能的空間就極其有限了。性能

可用的調優方法以下:優化

1. 增大新生代空間,以下降Minor GC頻率,減小CPU週期佔用;ui

2. 增長老年代空間,以下降CMS頻率,並能夠減小老年代內存碎片;spa

3. 優化CMS週期的啓動條件,儘量在較晚的時候進行;命令行

總的來講,就是減小垃圾收集佔用的CPU週期。線程

ParallelGC吞吐調優

這裏說的ParallelGC是指開啓了下面兩個JVM參數日誌

-XX:+UseParallelGC
-XX:+UseParallelOldGCcode

對ParallelGC調優的目標是儘量避免發生Full GC,這就須要優化對象老化頻率,能夠調整Survivor空間實現對對象老化的優化。

使用ParallelGC時,垃圾收集的開銷應小於5%,若是已經減小到1%甚至更少,那基本上就已經達到了極限。

Survivor調優

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線程會影響應用性能

其餘性能命令行選項

-XX:+AggressiveOpts 自動優化,但有可能不太穩定
-XX:+DoEscapeAnalysis 逃逸分析
-XX:+UseBiasedLocking 偏向鎖
-XX:+UseLargePages 大頁面支持
相關文章
相關標籤/搜索