介紹
Jstat是JDK自帶的一個輕量級小工具。全稱“Java Virtual Machine statistics monitoring tool”,它位于java的bin目錄下,主要利用JVM内建的指令對Java應用程式的資源和性能進行實時的指令行的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常适用。
jstat工具特别強大,有衆多的可選項,詳細檢視堆内各個部分的使用量,以及加載類的數量。使用時,需加上檢視程序的程序id,和所選參數
指令
0、jstat -options:列出所有jstat指令
class (類加載器)
compiler (JIT)
gc (GC堆狀态)
gccapacity (各區大小)
gccause (最近一次GC統計和原因)
gcnew (新區統計)
gcnewcapacity (新區大小)
gcold (老區統計)
gcoldcapacity (老區大小)
gcpermcapacity (永久區大小)
gcutil (GC統計彙總)
printcompilation (HotSpot編譯統計)
1、jstat –class<pid> <重新整理時間間隔(毫秒)> <列印行數> : 顯示加載class的數量,及所占空間等資訊。
- Loaded 裝載的類的數量
- Bytes 裝載類所占用的位元組數
- Unloaded 解除安裝類的數量
- Bytes 解除安裝類的位元組數
- Time 裝載和解除安裝類所花費的時間
2、jstat -compiler <pid>顯示VM實時編譯的數量等資訊。
- Compiled 編譯任務執行數量
- Failed 編譯任務執行失敗數量
- Invalid 編譯任務執行失效數量
- Time 編譯任務消耗時間
- FailedType 最後一個編譯失敗任務的類型
- FailedMethod 最後一個編譯失敗任務所在的類及方法
3、jstat -gc <pid>: 可以顯示gc的資訊,檢視gc的次數,及時間。
- S0C:第一個幸存區的大小
- S1C:第二個幸存區的大小
- S0U:第一個幸存區的使用大小
- S1U:第二個幸存區的使用大小
- EC:伊甸園區的大小
- EU:伊甸園區的使用大小
- OC:老年代大小
- OU:老年代使用大小
- MC:方法區大小
- MU:方法區使用大小
- CCSC:壓縮類空間大小
- CCSU:壓縮類空間使用大小
- YGC:年輕代垃圾回收次數
- YGCT:年輕代垃圾回收消耗時間
- FGC:老年代垃圾回收次數
- FGCT:老年代垃圾回收消耗時間
- GCT:垃圾回收消耗總時間
4、jstat -gccapacity <pid>:可以顯示,VM記憶體中三代(young,old,perm)對象的使用和占用大小
- NGCMN:新生代最小容量
- NGCMX:新生代最大容量
- NGC:目前新生代容量
- S0C:第一個幸存區大小
- S1C:第二個幸存區的大小
- EC:伊甸園區的大小
- OGCMN:老年代最小容量
- OGCMX:老年代最大容量
- OGC:目前老年代大小
- OC:目前老年代大小
- MCMN:最小中繼資料容量
- MCMX:最大中繼資料容量
- MC:目前中繼資料空間大小
- CCSMN:最小壓縮類空間大小
- CCSMX:最大壓縮類空間大小
- CCSC:目前壓縮類空間大小
- YGC:年輕代gc次數
- FGC:老年代GC次數
5、jstat -gcutil <pid>:統計gc資訊
- S0:幸存1區目前使用比例
- S1:幸存2區目前使用比例
- E:伊甸園區使用比例
- O:老年代使用比例
- M:中繼資料區使用比例
- CCS:壓縮使用比例
- YGC:年輕代垃圾回收次數
- FGC:老年代垃圾回收次數
- FGCT:老年代垃圾回收消耗時間
- GCT:垃圾回收消耗總時間
6、jstat -gcnew <pid>:年輕代對象的資訊。
- S0C:第一個幸存區大小
- S1C:第二個幸存區的大小
- S0U:第一個幸存區的使用大小
- S1U:第二個幸存區的使用大小
- TT:對象在新生代存活的次數
- MTT:對象在新生代存活的最大次數
- DSS:期望的幸存區大小
- EC:伊甸園區的大小
- EU:伊甸園區的使用大小
- YGC:年輕代垃圾回收次數
- YGCT:年輕代垃圾回收消耗時間
7、jstat -gcnewcapacity<pid>: 年輕代對象的資訊及其占用量。
- NGCMN:新生代最小容量
- NGCMX:新生代最大容量
- NGC:目前新生代容量
- S0CMX:最大幸存1區大小
- S0C:目前幸存1區大小
- S1CMX:最大幸存2區大小
- S1C:目前幸存2區大小
- ECMX:最大伊甸園區大小
- EC:目前伊甸園區大小
- YGC:年輕代垃圾回收次數
- FGC:老年代回收次數
8、jstat -gcold <pid>:old代對象的資訊。
- MC:方法區大小
- MU:方法區使用大小
- CCSC:壓縮類空間大小
- CCSU:壓縮類空間使用大小
- OC:老年代大小
- OU:老年代使用大小
- YGC:年輕代垃圾回收次數
- FGC:老年代垃圾回收次數
- FGCT:老年代垃圾回收消耗時間
- GCT:垃圾回收消耗總時間
9、jstat -gcoldcapacity <pid>: old代對象的資訊及其占用量。
- OGCMN:老年代最小容量
- OGCMX:老年代最大容量
- OGC:目前老年代大小
- OC:老年代大小
- YGC:年輕代垃圾回收次數
- FGC:老年代垃圾回收次數
- FGCT:老年代垃圾回收消耗時間
- GCT:垃圾回收消耗總時間
10、jstat -gcmetacapacity<pid>: meta對象的資訊及其占用量。
- MCMN:最小中繼資料容量
- MCMX:最大中繼資料容量
- MC:目前中繼資料空間大小
- CCSMN:最小壓縮類空間大小
- CCSMX:最大壓縮類空間大小
- CCSC:目前壓縮類空間大小
- YGC:年輕代垃圾回收次數
- FGC:老年代垃圾回收次數
- FGCT:老年代垃圾回收消耗時間
- GCT:垃圾回收消耗總時間
11、jstat -printcompilation <pid>:目前VM執行的資訊。
- Compiled:最近編譯方法的數量
- Size:最近編譯方法的位元組碼數量
- Type:最近編譯方法的編譯類型。
- Method:方法名辨別。
具體使用檢視gc情況
檢視程序id
ps -ef|grep java
檢視程序id為43的gc情況,每隔1秒列印一次,列印500次
jstat -gcutil 43 1000 500
垃圾回收統計
jstat -gc 43 1000 500
堆記憶體 = 年輕代 + 年老代 + 永久代
年輕代 = Eden區 + 兩個Survivor區(From和To)