天天看點

通過jstat實時檢測JVM記憶體變化

Jstat是JDK自帶的一個輕量級工具,主要用JVM内建的指令對java應用程式的資源和性能進行實時的監控。

基本文法

  jstat <option> [-t] [-h] <pid>  <interval> <count>

  參數解釋:

  • option   可以從下面參數中選擇
    • -class                 顯示ClassLoad的相關資訊;
    • -compiler           顯示JIT編譯的相關資訊;
    • -gc                     顯示和gc相關的堆資訊;
    • -gccapacity     顯示各個代的容量以及使用情況;
    • -gccause             顯示垃圾回收的相關資訊(通-gcutil),同時顯示最後一次或目前正在發生的垃圾回收的誘因;
    • -gcnew               顯示新生代資訊;
    • -gcnewcapacity  顯示新生代大小和使用情況;
    • -gcold                 顯示老年代和永久代的資訊;
    • -gcoldcapacity    顯示老年代的大小;
    • -gcpermcapacity 顯示永久代的大小;
    • -gcutil             顯示垃圾收集資訊;   
    • -printcompilation輸出JIT編譯的方法資訊;
  • -t         可以在列印的列加上Timestamp列,用于顯示系統運作的時間
  • -h     可以在周期性資料資料的時候,可以在指定輸出多少行以後輸出一次表頭
  • interval 執行每次的間隔時間,機關為毫秒
  • count   用于指定輸出多少次記錄,預設則會一直列印

  使用說明

  首先我們 使用linux指令 ps -ef|grep resin 檢視我要監視程序的pid 23814

  

通過jstat實時檢測JVM記憶體變化

-

  1、-class (jstat -class pid 1000 5 檢視pid為23814的ClassLoad相關資訊,每秒鐘列印一次,總共列印5次)

  

通過jstat實時檢測JVM記憶體變化
  • Loaded 加載類的數量
  • Bytes 加載類合計大小
  • Unloaded 解除安裝類的數量
  • Bytes 解除安裝類合計大小
  • Time 表示加載和解除安裝類總共的耗時

  加載了9276個類,總大小為18045.9byte 解除安裝類0個,總大小為0byte,解除安裝和加載總耗時9.24ms

  2、-compiler (Jstat -cpmpiler pid)

  

通過jstat實時檢測JVM記憶體變化
  • Compiled 表示編譯任務執行的次數
  • Failed 表示編譯失敗的次數
  • Invalid 表示編譯不可用的次數
  • Time 表示編譯的總耗時
  • FailedType 表示最後一次編譯的類型
  • FailedMethod 表示最後一次編譯失敗的類名和方法名

  3、-gc (jstat -gc pid 1000 5 )

  

通過jstat實時檢測JVM記憶體變化
  • S0C: Survivor0(幸存區0)大小(KB)
  • S1C: Survivor1(幸存區1)1大小(KB)
  • S0U: Survivor0(幸存區0)已使用大小(KB)
  • S1U: Survivor1(幸存區1)已使用大小(KB)
  • EC  : Eden(伊甸區)大小(KB)
  • EU  : Eden(伊甸區)已使用大小(KB)
  • OC :老年代大小(KB)
  • OU : 老年代已使用大小(KB)
  • PC : Perm永久代大小(KB)
  • PU : Perm永久代已使用大小(KB)
  • YGC:新生代GC個數
  • YGCT:新生代GC的耗時(秒)
  • FGC  :Full GC次數
  • FGCT:Full GC耗時(秒)
  • GCT :GC總耗時(秒) 

  4、-gccapacity(jstat -gccapacity pid:顯示各個代的容量的資訊)

  

通過jstat實時檢測JVM記憶體變化
  • NGCMN:新生代最小值(KB)
  • NGVMX:新生代最大值(KB)
  • NGC:目前新生代大小(KB)
  • S0C:同上
  • S1C:同上
  • EC:同上
  • OGCMN:老年代最小值(KB)
  • OGCMX:老年代最大值(KB)
  • OGC:目前老年代大小(KB)
  • OC:同上
  • PGCMN:永久代最小值(KB)
  • PGCMX:永久代最大值(KB)
  • PGC:目前永久代大小(KB)
  • PC:同上
  • YGC:同上
  • FGC:同上

 5、-gccause(jstat -gccause pid:顯示最近一次GC的原因)

  

通過jstat實時檢測JVM記憶體變化
  • LGCC:上一次GC的原因,是G1垃圾回收器回收
  • GCC :目前GC的原因

 6、-gcnew (jstat -gcnew pid:顯示新生代的詳細資訊)

  

通過jstat實時檢測JVM記憶體變化
  • TT:新生代到老年代的年齡;
  • MTT:新生代到老年代的最大年齡;
  • DSS:所需的survivor的大小;

  7、-gcnewcapacity(jstat -gcnewcapacity pid:輸出新生代各個區的詳細資訊)

  

通過jstat實時檢測JVM記憶體變化
  • S0CMX:S0最大空間大小(KB)
  • S1CMX:S1最大空間大小(KB)
  • ECMX:Eden最大空間大小(KB)
  • NGCMX:年輕代最大空間大小(KB)

  8、-gcold(jstat -gcold pid:顯示老年代GC的詳細情況)

  

通過jstat實時檢測JVM記憶體變化

 9、-gcoldcapacity(jstat -gcoldcapacitp pid:輸出老年代的詳細資訊)

  

通過jstat實時檢測JVM記憶體變化

 10、-gcutil(jstat -gcutil pid:檢視每個代區域使用的百分比情況)

 

通過jstat實時檢測JVM記憶體變化

 

繼續閱讀