JVM GC性能方面的考虑(吞吐量和STW)
GC性能方面的考慮
? 對于GC的性能主要有2個方面的指標:吞吐量throughput(工作時間不算gc的時間占總的時間比)和暫停pause(gc發生時app對外顯示的無法響應)。
? 默認情況下,vm會增加/減少heap大小以維持free space在整個vm中占的比例,這個比例由MinHeapFreeRatio和MaxHeapFreeRatio指定。
一般而言,server端的app會有以下規則:
- 對vm分配盡可能多的memory;
- 將Xms和Xmx設為一樣的值。如果虛擬機啟動時設置使用的內存比較小,這個時候又需要初始化很多對象,虛擬機就必須重復地增加內存。
- 處理器核數增加,內存也跟著增大。
? 另外一個對于app流暢性運行影響的因素是young generation的大小。young generation越大,minor collection越少;但是在固定heap size情況下,更大的young generation就意味著小的tenured generation,就意味著更多的major collection(major collection會引發minor collection)。
? NewRatio反映的是young和tenured generation的大小比例。NewSize和MaxNewSize反映的是young generation大小的下限和上限,將這兩個值設為一樣就固定了young generation的大小(同Xms和Xmx設為一樣)。
? 如果希望,SurvivorRatio也可以優化survivor的大小,不過這對于性能的影響不是很大。SurvivorRatio是eden和survior大小比例。
一般而言,server端的app會有以下規則:
- 首先決定能分配給vm的最大的heap size,然后設定最佳的young generation的大小;
- 如果heap size固定后,增加young generation的大小意味著減小tenured generation大小。讓tenured generation在任何時候夠大,能夠容納所有live的data(留10%-20%的空余)。
總結
以上是生活随笔為你收集整理的JVM GC性能方面的考虑(吞吐量和STW)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM辅助信息参数设置
- 下一篇: JVM生产环境参数实例及分析