Java命令:jstat(JVM Statistics Monitoring Tool)

jstat(JVM Statistics Monitoring Tool)

jstat(JVM Statistics Monitoring Tool)是用于監控虛擬機各種運行狀態信息的命令行工具。他可以顯示本地或遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據,在沒有GUI圖形的服務器上,它是運行期定位虛擬機性能問題的首選工具。

jstat位于java的bin目錄下,主要利用JVM內建的指令對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常適用。

jstat 命令格式

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

參數解釋:

  • Option — 選項,我們一般使用 -gcutil 查看gc情況

  • vmid — VM的進程號,即當前運行的java進程號

  • interval– 間隔時間,單位為秒或者毫秒

  • count — 打印次數,如果缺省則打印無數次

  • 參數interval和count代表查詢間隔和次數,如果省略這兩個參數,說明只查詢一次。

假設需要每250毫秒查詢一次進程5828垃圾收集狀況,一共查詢5次,那命令行如下:

jstat -gc 5828 250 5

對于命令格式中的VMID與LVMID需要特別說明下:如果是本地虛擬機進程,VMID(Virtual Machine IDentifier,虛機標識符)和LVMID(Local Virtual Machine IDentifier,虛機標識符)是一致的,如果是遠程虛擬機進程,那VMID的格式應當是:[protocol:][//] lvmid [@hostname[:port]/servername]

option

選項option代表這用戶希望查詢的虛擬機信息,主要分為3類:類裝載、垃圾收集和運行期編譯狀況,具體選項及作用如下:

  • –class 監視類裝載、卸載數量、總空間及類裝載所耗費的時間
  • –gc 監視Java堆狀況,包括Eden區、2個Survivor區、老年代、永久代等的容量
  • –gccapacity 監視內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大和最小空間
  • –gcutil 監視內容與-gc基本相同,但輸出主要關注已使用空間占總空間的百分比
  • –gcnew 監視新生代GC的狀況
  • –gcnewcapacity 監視內容與-gcnew基本相同,輸出主要關注使用到的最大和最小空間
  • –gcold 監視老年代GC的狀況
  • –gcoldcapacity 監視內容與-gcold基本相同,輸出主要關注使用到的最大和最小空間
  • –gcpermcapacity 輸出永久代使用到的最大和最小空間
  • –compiler 輸出JIT編譯器編譯過的方法、耗時等信息
  • –printcompilation 輸出已經被JIT編譯的方法

常見術語

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 年輕代中第一個survivor(幸存區)的容量 (字節)
  • S1C 年輕代中第二個survivor(幸存區)的容量 (字節)
  • S0U 年輕代中第一個survivor(幸存區)目前已使用空間 (字節)
  • S1U 年輕代中第二個survivor(幸存區)目前已使用空間 (字節)
  • EC 年輕代中Eden(伊甸園)的容量 (字節)
  • EU 年輕代中Eden(伊甸園)目前已使用空間 (字節)
  • OC Old代的容量 (字節)
  • OU Old代目前已使用空間 (字節)
  • PC Perm(持久代)的容量 (字節)
  • PU Perm(持久代)目前已使用空間 (字節)
  • YGC 從應用程序啟動到采樣時年輕代中gc次數
  • YGCT 從應用程序啟動到采樣時年輕代中gc所用時間(s)
  • FGC 從應用程序啟動到采樣時old代(全gc)gc次數
  • FGCT 從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
  • GCT 從應用程序啟動到采樣時gc用的總時間(s)

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

  • NGCMN 年輕代(young)中初始化(最小)的大小(字節)
  • NGCMX 年輕代(young)的最大容量 (字節)
  • NGC 年輕代(young)中當前的容量 (字節)
  • S0C 年輕代中第一個survivor(幸存區)的容量 (字節)
  • S1C 年輕代中第二個survivor(幸存區)的容量 (字節)
  • EC 年輕代中Eden(伊甸園)的容量 (字節)
  • OGCMN old代中初始化(最小)的大小 (字節)
  • OGCMX old代的最大容量(字節)
  • OGC old代當前新生成的容量 (字節)
  • OC Old代的容量 (字節)
  • PGCMN perm代中初始化(最小)的大小 (字節)
  • PGCMX perm代的最大容量 (字節)
  • PGC perm代當前新生成的容量 (字節)
  • PC Perm(持久代)的容量 (字節)
  • YGC 從應用程序啟動到采樣時年輕代中gc次數
  • FGC 從應用程序啟動到采樣時old代(全gc)gc次數

5、jstat -gcutil <pid>:統計gc信息

  • S0 年輕代中第一個survivor(幸存區)已使用的占當前容量百分比
  • S1 年輕代中第二個survivor(幸存區)已使用的占當前容量百分比
  • E 年輕代中Eden(伊甸園)已使用的占當前容量百分比
  • O old代已使用的占當前容量百分比
  • P perm代已使用的占當前容量百分比
  • YGC 從應用程序啟動到采樣時年輕代中gc次數
  • YGCT 從應用程序啟動到采樣時年輕代中gc所用時間(s)
  • FGC 從應用程序啟動到采樣時old代(全gc)gc次數
  • FGCT 從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
  • GCT 從應用程序啟動到采樣時gc用的總時間(s)

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

  • S0C 年輕代中第一個survivor(幸存區)的容量 (字節)
  • S1C 年輕代中第二個survivor(幸存區)的容量 (字節)
  • S0U 年輕代中第一個survivor(幸存區)目前已使用空間 (字節)
  • S1U 年輕代中第二個survivor(幸存區)目前已使用空間 (字節)
  • TT 持有次數限制
  • MTT 最大持有次數限制
  • EC 年輕代中Eden(伊甸園)的容量 (字節)
  • EU 年輕代中Eden(伊甸園)目前已使用空間 (字節)
  • YGC 從應用程序啟動到采樣時年輕代中gc次數
  • YGCT 從應用程序啟動到采樣時年輕代中gc所用時間(s)

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

  • NGCMN 年輕代(young)中初始化(最小)的大小(字節)
  • NGCMX 年輕代(young)的最大容量 (字節)
  • NGC 年輕代(young)中當前的容量 (字節)
  • S0CMX 年輕代中第一個survivor(幸存區)的最大容量 (字節)
  • S0C 年輕代中第一個survivor(幸存區)的容量 (字節)
  • S1CMX 年輕代中第二個survivor(幸存區)的最大容量 (字節)
  • S1C 年輕代中第二個survivor(幸存區)的容量 (字節)
  • ECMX 年輕代中Eden(伊甸園)的最大容量 (字節)
  • EC 年輕代中Eden(伊甸園)的容量 (字節)
  • YGC 從應用程序啟動到采樣時年輕代中gc次數
  • FGC 從應用程序啟動到采樣時old代(全gc)gc次數

8、jstat -gcold <pid>:old代對象的信息。

  • PC Perm(持久代)的容量 (字節)
  • PU Perm(持久代)目前已使用空間 (字節)
  • OC Old代的容量 (字節)
  • OU Old代目前已使用空間 (字節)
  • YGC 從應用程序啟動到采樣時年輕代中gc次數
  • FGC 從應用程序啟動到采樣時old代(全gc)gc次數
  • FGCT 從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
  • GCT 從應用程序啟動到采樣時gc用的總時間(s)

9、stat -gcoldcapacity <pid>: old代對象的信息及其占用量。

  • OGCMN old代中初始化(最小)的大小 (字節)
  • OGCMX old代的最大容量(字節)
  • OGC old代當前新生成的容量 (字節)
  • OC Old代的容量 (字節)
  • YGC 從應用程序啟動到采樣時年輕代中gc次數
  • FGC 從應用程序啟動到采樣時old代(全gc)gc次數
  • FGCT 從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
  • GCT 從應用程序啟動到采樣時gc用的總時間(s)

10、jstat -gcpermcapacity<pid>: perm對象的信息及其占用量。

  • PGCMN perm代中初始化(最小)的大小 (字節)
  • PGCMX perm代的最大容量 (字節)
  • PGC perm代當前新生成的容量 (字節)
  • PC Perm(持久代)的容量 (字節)
  • YGC 從應用程序啟動到采樣時年輕代中gc次數
  • FGC 從應用程序啟動到采樣時old代(全gc)gc次數
  • FGCT 從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
  • GCT 從應用程序啟動到采樣時gc用的總時間(s)

11、jstat -printcompilation <pid>:當前VM執行的信息。

  • Compiled 編譯任務的數目
  • Size 方法生成的字節碼的大小
  • Type 編譯類型
  • Method 類名和方法名用來標識編譯的方法。類名使用/做為一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設置的
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容