天天看點

JVM——使用工具——jstat具體使用檢視gc情況

介紹

Jstat是JDK自帶的一個輕量級小工具。全稱“Java Virtual Machine statistics monitoring tool”,它位于java的bin目錄下,主要利用JVM内建的指令對Java應用程式的資源和性能進行實時的指令行的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常适用。

jstat工具特别強大,有衆多的可選項,詳細檢視堆内各個部分的使用量,以及加載類的數量。使用時,需加上檢視程序的程序id,和所選參數

指令

0、jstat -options:列出所有jstat指令

JVM——使用工具——jstat具體使用檢視gc情況

class (類加載器) 

compiler (JIT) 

gc (GC堆狀态) 

gccapacity (各區大小) 

gccause (最近一次GC統計和原因) 

gcnew (新區統計)

gcnewcapacity (新區大小)

gcold (老區統計)

gcoldcapacity (老區大小)

gcpermcapacity (永久區大小)

gcutil (GC統計彙總)

printcompilation (HotSpot編譯統計)

1、jstat –class<pid> <重新整理時間間隔(毫秒)> <列印行數> : 顯示加載class的數量,及所占空間等資訊。

JVM——使用工具——jstat具體使用檢視gc情況
  1. Loaded 裝載的類的數量
  2. Bytes 裝載類所占用的位元組數
  3. Unloaded 解除安裝類的數量
  4. Bytes 解除安裝類的位元組數
  5. Time 裝載和解除安裝類所花費的時間

2、jstat -compiler <pid>顯示VM實時編譯的數量等資訊。

JVM——使用工具——jstat具體使用檢視gc情況
  1. Compiled 編譯任務執行數量
  2. Failed 編譯任務執行失敗數量
  3. Invalid   編譯任務執行失效數量
  4. Time  編譯任務消耗時間
  5. FailedType 最後一個編譯失敗任務的類型
  6. FailedMethod 最後一個編譯失敗任務所在的類及方法

3、jstat -gc <pid>: 可以顯示gc的資訊,檢視gc的次數,及時間。

JVM——使用工具——jstat具體使用檢視gc情況
  1. S0C:第一個幸存區的大小
  2. S1C:第二個幸存區的大小
  3. S0U:第一個幸存區的使用大小
  4. S1U:第二個幸存區的使用大小
  5. EC:伊甸園區的大小
  6. EU:伊甸園區的使用大小
  7. OC:老年代大小
  8. OU:老年代使用大小
  9. MC:方法區大小
  10. MU:方法區使用大小
  11. CCSC:壓縮類空間大小
  12. CCSU:壓縮類空間使用大小
  13. YGC:年輕代垃圾回收次數
  14. YGCT:年輕代垃圾回收消耗時間
  15. FGC:老年代垃圾回收次數
  16. FGCT:老年代垃圾回收消耗時間
  17. GCT:垃圾回收消耗總時間

4、jstat -gccapacity <pid>:可以顯示,VM記憶體中三代(young,old,perm)對象的使用和占用大小

JVM——使用工具——jstat具體使用檢視gc情況
  1. NGCMN:新生代最小容量
  2. NGCMX:新生代最大容量
  3. NGC:目前新生代容量
  4. S0C:第一個幸存區大小
  5. S1C:第二個幸存區的大小
  6. EC:伊甸園區的大小
  7. OGCMN:老年代最小容量
  8. OGCMX:老年代最大容量
  9. OGC:目前老年代大小
  10. OC:目前老年代大小
  11. MCMN:最小中繼資料容量
  12. MCMX:最大中繼資料容量
  13. MC:目前中繼資料空間大小
  14. CCSMN:最小壓縮類空間大小
  15. CCSMX:最大壓縮類空間大小
  16. CCSC:目前壓縮類空間大小
  17. YGC:年輕代gc次數
  18. FGC:老年代GC次數

5、jstat -gcutil <pid>:統計gc資訊

JVM——使用工具——jstat具體使用檢視gc情況
  1. S0:幸存1區目前使用比例
  2. S1:幸存2區目前使用比例
  3. E:伊甸園區使用比例
  4. O:老年代使用比例
  5. M:中繼資料區使用比例
  6. CCS:壓縮使用比例
  7. YGC:年輕代垃圾回收次數
  8. FGC:老年代垃圾回收次數
  9. FGCT:老年代垃圾回收消耗時間
  10. GCT:垃圾回收消耗總時間

6、jstat -gcnew <pid>:年輕代對象的資訊。

JVM——使用工具——jstat具體使用檢視gc情況
  1. S0C:第一個幸存區大小
  2. S1C:第二個幸存區的大小
  3. S0U:第一個幸存區的使用大小
  4. S1U:第二個幸存區的使用大小
  5. TT:對象在新生代存活的次數
  6. MTT:對象在新生代存活的最大次數
  7. DSS:期望的幸存區大小
  8. EC:伊甸園區的大小
  9. EU:伊甸園區的使用大小
  10. YGC:年輕代垃圾回收次數
  11. YGCT:年輕代垃圾回收消耗時間

7、jstat -gcnewcapacity<pid>: 年輕代對象的資訊及其占用量。

JVM——使用工具——jstat具體使用檢視gc情況
  1. NGCMN:新生代最小容量
  2. NGCMX:新生代最大容量
  3. NGC:目前新生代容量
  4. S0CMX:最大幸存1區大小
  5. S0C:目前幸存1區大小
  6. S1CMX:最大幸存2區大小
  7. S1C:目前幸存2區大小
  8. ECMX:最大伊甸園區大小
  9. EC:目前伊甸園區大小
  10. YGC:年輕代垃圾回收次數
  11. FGC:老年代回收次數

8、jstat -gcold <pid>:old代對象的資訊。

JVM——使用工具——jstat具體使用檢視gc情況
  1. MC:方法區大小
  2. MU:方法區使用大小
  3. CCSC:壓縮類空間大小
  4. CCSU:壓縮類空間使用大小
  5. OC:老年代大小
  6. OU:老年代使用大小
  7. YGC:年輕代垃圾回收次數
  8. FGC:老年代垃圾回收次數
  9. FGCT:老年代垃圾回收消耗時間
  10. GCT:垃圾回收消耗總時間

9、jstat -gcoldcapacity <pid>: old代對象的資訊及其占用量。

JVM——使用工具——jstat具體使用檢視gc情況
  1. OGCMN:老年代最小容量
  2. OGCMX:老年代最大容量
  3. OGC:目前老年代大小
  4. OC:老年代大小
  5. YGC:年輕代垃圾回收次數
  6. FGC:老年代垃圾回收次數
  7. FGCT:老年代垃圾回收消耗時間
  8. GCT:垃圾回收消耗總時間

10、jstat -gcmetacapacity<pid>: meta對象的資訊及其占用量。

JVM——使用工具——jstat具體使用檢視gc情況
  1. MCMN:最小中繼資料容量
  2. MCMX:最大中繼資料容量
  3. MC:目前中繼資料空間大小
  4. CCSMN:最小壓縮類空間大小
  5. CCSMX:最大壓縮類空間大小
  6. CCSC:目前壓縮類空間大小
  7. YGC:年輕代垃圾回收次數
  8. FGC:老年代垃圾回收次數
  9. FGCT:老年代垃圾回收消耗時間
  10. GCT:垃圾回收消耗總時間

11、jstat -printcompilation <pid>:目前VM執行的資訊。

JVM——使用工具——jstat具體使用檢視gc情況
  1. Compiled:最近編譯方法的數量
  2. Size:最近編譯方法的位元組碼數量
  3. Type:最近編譯方法的編譯類型。
  4. Method:方法名辨別。

具體使用檢視gc情況

檢視程序id

ps -ef|grep java
JVM——使用工具——jstat具體使用檢視gc情況

檢視程序id為43的gc情況,每隔1秒列印一次,列印500次

jstat -gcutil 43 1000 500
JVM——使用工具——jstat具體使用檢視gc情況

垃圾回收統計

jstat -gc 43 1000 500
JVM——使用工具——jstat具體使用檢視gc情況

堆記憶體 = 年輕代 + 年老代 + 永久代

年輕代 = Eden區 + 兩個Survivor區(From和To)

jvm