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