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具體運行情況去進行有針對性的優化。