深入JVM虛擬機之使用jstat命令摸清線上系統的JVM運行狀態

1、對於運行中的系統,想檢查JVM中的整體運行情況,最常用的工具就是jstat

2、通過jstat可以查看JVM內部的內存的使用情況,還有GC的執行次數以及耗時

3、通過這些指標,可以判斷出系統的當前內存使用壓力以及GC壓力,內存分配是否合理

 

新生代對象的增長速度

1、對JVM首先要了解的,就是隨着系統的運行,每秒鐘會在年輕代的Eedn區分配多少對象

2、 jstat -gc [PID] 1000每隔1秒中執行1次jstat統計

3、舉例:第一秒先顯示Eden區使用了200MB內存,第二秒顯示Eden區使用了205MB內存,第三秒顯示Eden區使用了209MB內存,此時你可以輕易的推斷出來,這個系統大概每秒鐘會新增5MB左右的對象

4、按照上述思路,可以把握線上系統的高峯和日常兩個時間段的對象增長速率。

Young GC的觸發頻率

1、知道新生代對象的增長的速度,很容易推測出來多久發生一次Young GC  

2、比如5MB每秒,Eden區一共300MB,則大概1分鐘就會Monitor GC一次。

Young GC平均耗時

1、jstat結果顯示了系統已經發生餓多少次Young GC以及這些Young GC總耗時

2、比如系統運行24小時後共發生了300次Young GC,總耗時爲30s,那麼平均下來每次Young GC大概耗時0.1秒的時間,也就是會導致系統停頓0.1秒的時間。

老年代

1、從一個正常的角度來看,來年代扽對象是不太可能不停的快速增長的,因爲普通的系統其實沒那麼多長期存活的對象。

2、如果你發現比如每次Young GC過後,老年代對象都要增長几十MB,那很有可能就是你一次Young GC過後存活的對象太多了。

3、老年代滿了會觸發Full GC,極度影響程序性能。

Full GC平均耗時

1、Jstat結果中顯示系統已經發生了多少次Full GC以及這些Full  GC的總耗時。

2、調優 的目的是爲了Full  GC出現的越少越好。

總結:

1、靈活運行jstat,可以輕而易舉掌控線上JVM運行的詳細情況

2、針對JVM具體運行情況去進行有針對性的優化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章