[JVM工具(1)] 堆疊檢查利器jstat的使用

AnonyStar發表於2020-12-18

jstat

  • 可以檢查 JVM 整體的執行情況,可以看到 新生代,老年代等的記憶體使用情況,以及GC 次數和耗時
  • 命令格式 如 jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
  • 其中 -option 必選參數列示命令引數 如 gc 等, -t 為可選參數列示是否列印時間(秒),-h<lines> 可選引數,表示每隔多少行列印頭部列表,如設定 -h 5 , 那麼每五條記錄就會重新列印表頭,vmid 必選引數,Java 程式idinterval 可選參數列示取樣的時間間隔,count 可選參數列示需要取樣多少條,

jstat -gc pid

  • jstat -gc pid 這是最常用的語法,可以直接檢視記憶體和垃圾回收情況
  • 首先我們要獲得Java 程式的 PID 資訊,可以通過 jps 命令來獲取
  • 之後執行 jstat -gc pid 即可看到對應 Java 程式的記憶體情況,如下:

  • 這裡說明一下關於這些列名的含義

    • S0C : 新生代中第一個 Survivor (即 From 區)的容量大小 (千位元組)
    • S1C : 新生代中第二個 Survivor (即 To 區)的容量大小 (千位元組)
    • S0U : 新生代 From Survivor 區已使用記憶體大小(千位元組)
    • S1U : 新生代 To Survivor 區一使用記憶體大小(千位元組)
    • EC : 新生代 Eden 區的容量大小(千位元組)
    • EU : 新生代 Eden 區已使用記憶體大小(千位元組)
    • OC : 老年代空間容量大小(千位元組)
    • OU : 老年代已使用記憶體大小(千位元組)
    • MC : 方法區的空間大小 (千位元組)
    • MU : 方法區已使用的空間大小(千位元組)
    • YGC : 從系統啟動到現在 Young GC/Minor GC 的次數
    • YGCT : Young GC 總耗時(秒)
    • FGC :從系統啟動到現在 Full GC 的次數
    • FGCT : Full GC 的總耗時(秒)
    • GCT : 垃圾回收總的耗時(秒)
    • NGCMN :年輕代( young )中初始化(最小)的大小 (千位元組)
    • NGCMX :年輕代( young )的最大容量 (千位元組)
    • GC :年輕代( young )中當前的容量 (千位元組)
    • OGCMNold 代中初始化(最小)的大小 (千位元組)
    • OGCMXold 代的最大容量 (千位元組)
    • OGCold 代當前新生成的容量 (千位元組)
    • PGCMNperm 代中初始化(最小)的大小 (千位元組)
    • PGCMXperm 代的最大容量 (千位元組)
    • PGCperm 代當前新生成的容量 (千位元組)
    • S0 :年輕代中 From survivor (倖存區)已使用的佔當前容量百分比
    • S1 :年輕代中 To Survivor (倖存區)已使用的佔當前容量百分比
    • E :年輕代中 Eden (伊甸園)已使用的佔當前容量百分比
    • Oold 代已使用的佔當前容量百分比
    • Pperm 代已使用的佔當前容量百分比
    • S0CMX :年輕代中 From survivor (倖存區)的最大容量 (千位元組)
    • S1CMX :年輕代中 To Survivor (倖存區)的最大容量 (千位元組)
    • ECMX :年輕代中 Eden (伊甸園)的最大容量 (千位元組)
    • DSS :當前需要 survivor (倖存區)的容量 (千位元組)( Eden 區已滿)
    • TT : 持有次數限制
    • MTT : 最大持有次數限制

jstat -gcutil PID

  • 一般我們還可以通過 jstat -gcutil pid 來獲取分代年齡的使用情況,顯示為佔比,如下,表頭參考上面

jstat -gccapacity PID

  • -gccapacity 命令主要用來分析堆記憶體,用法參考上面,如下效果,表頭含義參看上面

其他一些命令引數

  • jstat -gcnew PID : 年輕代GC 分析,其中 TTMTT 可以看到物件在年齡代存活的年齡和存活的最大年齡

  • jstat -gcnewcapacity PID : 年輕代記憶體分析

  • jstat -gcold PID: 老年代 GC 分析

  • jstat -gcoldcapacity: 老年代記憶體分析

  • jstat -gcmetacapacity PID: 後設資料記憶體分析

jstat -class PID

  • 統計程式中載入的類的數量,如下:

  • 說明:

Loaded:載入class的數量
Bytes:所佔用空間大小
Unloaded:未載入數量
Bytes:未載入佔用空間
Time:時間

jstat -compiler PID

  • 編譯資訊的統計命令, 如下命令 jstat -class 15372

  • 說明:
Compiled:編譯數量。
Failed:失敗數量
Invalid:不可用數量
Time:時間
FailedType:失敗型別
FailedMethod:失敗的方法

jstat -printcompilation PID

  • JVM 編譯方法的統計,如下命令 jstat -printcompilation 15372

  • 說明:
Compiled:最近編譯方法的數量
Size:最近編譯方法的位元組碼數量
Type:最近編譯方法的編譯型別。
Method:方法名標識。

好了今天就說到這裡, jstat 死一個非常還用的工具,需要平時多使用多分析才能真真掌握,下次我們接著說相關的工具的使用~????


本文由AnonyStar 釋出,可轉載但需宣告原文出處。
歡迎關注微信公賬號 :雲棲簡碼 獲取更多優質文章
更多文章關注筆者部落格 :雲棲簡碼 i-code.online

相關文章