jstat:查看JVM統計信息
- 一 基本情況
- 二 基本語法
- 2.1 option參數
- 1. 類裝載相關的:
- 2. 垃圾回收相關的
- `-gc`:顯示與GC相關的堆信息。包括Eden區、兩個Survivor區、老年代、永久代等的容量、已用空間、GC時間合計等信息。
- `-gccapacity`:顯示內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大、最小空間。
- `-gcutil`:顯示內容與-gc基本相同,但輸出主要關注已使用空間占總空間的百分比。
- `-gccause`:與-gcutil功能一樣,但是會額外輸出導致最后一次或當前正在發生的GC產生的原因。
- `-gcnew`:顯示新生代GC狀況
- `-gcnewcapacity`:顯示內容與-gcnew基本相同,輸出主要關注使用到的最大、最小空間
- `-geold`:顯示老年代GC狀況
- `-gcoldcapacity`:顯示內容與-gcold基本相同,輸出主要關注使用到的最大、最小空間
- `-gcpermcapacity`:顯示永久代使用到的最大、最小空間。
- 3. **JIT相關的:**
- `-compiler`:顯示JIT編譯器編譯過的方法、耗時等信息
- `-printcompilation`:輸出已經被JIT編譯的方法 
- 2.2 interval參數
- 2.2 count參數
- 2.3 -t參數
- 2.4 -h參數
- 三 補充
一 基本情況
jstat(JVM Statistics Monitoring Tool):用于監視虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或者遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據。 在沒有GUI圖形界面,只提供了純文本控制臺環境的服務器上,它將是運行期定位虛擬機性能問題的首選工具。常用于檢測垃圾回收問題以及內存泄漏問題。 官方文檔
二 基本語法
它的基本使用語法為:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
查看命令相關參數:
jstat -h 或 jstat -help
2.1 option參數
選項option可以由以下值構成。
1. 類裝載相關的:
-class
:顯示ClassLoader的相關信息:類的裝載、卸載數量、總空間、類裝載所消耗的時間等
2. 垃圾回收相關的
-gc
:顯示與GC相關的堆信息。包括Eden區、兩個Survivor區、老年代、永久代等的容量、已用空間、GC時間合計等信息。
新生代相關
S0C
是第一個幸存者區的大小(字節)S1C
是第二個幸存者區的大小(字節)S0U
是第一個幸存者區已使用的大小(字節)S1U
是第二個幸存者區已使用的大小(字節)EC
是Eden空間的大小(字節)EU
是Eden空間已使用大小(字節)
老年代相關
OC
是老年代的大小(字節)OU
是老年代已使用的大小(字節)
方法區(元空間)相關
MC
是方法區的大小MU
是方法區已使用的大小CCSC
是壓縮類空間的大小CCSU
是壓縮類空間已使用的大小
其它
YGC
是指從應用程序啟動到采樣時young gc次數YGCT
是指從應用程序啟動到采樣時young gc消耗的時間(秒)FGC
是指從應用程序啟動到采樣時full gc次數FGCT
是指從應用程序啟動到采樣時full gc消耗的時間(秒)GCT
是指從應用程序啟動到采樣時gc的總時間
-gccapacity
:顯示內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大、最小空間。
-gcutil
:顯示內容與-gc基本相同,但輸出主要關注已使用空間占總空間的百分比。
-gccause
:與-gcutil功能一樣,但是會額外輸出導致最后一次或當前正在發生的GC產生的原因。
-gcnew
:顯示新生代GC狀況
-gcnewcapacity
:顯示內容與-gcnew基本相同,輸出主要關注使用到的最大、最小空間
-geold
:顯示老年代GC狀況
-gcoldcapacity
:顯示內容與-gcold基本相同,輸出主要關注使用到的最大、最小空間
-gcpermcapacity
:顯示永久代使用到的最大、最小空間。
3. JIT相關的:
-compiler
:顯示JIT編譯器編譯過的方法、耗時等信息
-printcompilation
:輸出已經被JIT編譯的方法 
2.2 interval參數
用于指定輸出統計數據的周期,單位為毫秒。即:查詢間隔
每隔一秒打印一次數據
2.2 count參數
用于指定查詢的總次數
每隔一秒打印一次數據,共打印5次
2.3 -t參數
可以在輸出信息前加上一個Timestamp列,顯示程序的運行時間。單位:秒
程序的運行時間
經驗
我們可以比較 Java 進程的啟動時間以及總 GC 時間(GCT 列),或者兩次測量的間隔時間以及總 GC 時間的增量,來得出 GC 時間占運行時間的比例。如果該比例超過 20%,則說明目前堆的壓力較大;如果該比例超過 90%,則說明堆里幾乎沒有可用空間,隨時都可能拋出 OOM 異常。
2.4 -h參數
可以在周期性數據輸岀時,輸出多少行數據后輸出一個表頭信息
h表示head表頭,4表示每隔4條數據打印一個表頭
三 補充
jstat還可以用來判斷是否出現內存泄漏。
第1步:在長時間運行的 Java 程序中,我們可以運行jstat命令連續獲取多行性能數據,并取這幾行數據中 OU 列(即已占用的老年代內存)的最小值。
第2步:然后,我們每隔一段較長的時間重復一次上述操作,來獲得多組 OU 最小值。如果這些值呈上漲趨勢,則說明該 Java 程序的老年代內存已使用量在不斷上漲,這意味著無法回收的對象在不斷增加,因此很有可能存在內存泄漏。
JVM之GC 調優基礎知識(一)