jvm 性能調優工具之 jstat

概述

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

jstat 用法

  • option: 參數選項
  • -t: 可以在打印的列加上Timestamp列,用於顯示系統運行的時間
  • -h: 可以在週期性數據數據的時候,可以在指定輸出多少行以後輸出一次表頭
  • vmid: Virtual Machine ID( 進程的 pid)
  • interval: 執行每次的間隔時間,單位爲毫秒
  • count: 用於指定輸出多少次記錄,缺省則會一直打印

option 可以從下面參數中選擇

  • -class 顯示ClassLoad的相關信息;
  • -compiler 顯示JIT編譯的相關信息;
  • -gc 顯示和gc相關的堆信息;
  • -gccapacity    顯示各個代的容量以及使用情況;
  • -gcmetacapacity 顯示metaspace的大小
  • -gcnew 顯示新生代信息;
  • -gcnewcapacity 顯示新生代大小和使用情況;
  • -gcold 顯示老年代和永久代的信息;
  • -gcoldcapacity 顯示老年代的大小;
  • -gcutil   顯示垃圾收集信息;
  • -gccause 顯示垃圾回收的相關信息(通-gcutil),同時顯示最後一次或當前正在發生的垃圾回收的誘因;
  • -printcompilation 輸出JIT編譯的方法信息;

示例一:-class

顯示加載class的數量,及所佔空間等信息。

jstat -class <pid>
  • Loaded : 已經裝載的類的數量
  • Bytes : 裝載類所佔用的字節數
  • Unloaded:已經卸載類的數量
  • Bytes:卸載類的字節數
  • Time:裝載和卸載類所花費的時間

示例二: -compiler

顯示VM實時編譯(JIT)的數量等信息。

jstat -compiler <pid>
  • Compiled:編譯任務執行數量
  • Failed:編譯任務執行失敗數量
  • Invalid :編譯任務執行失效數量
  • Time :編譯任務消耗時間
  • FailedType:最後一個編譯失敗任務的類型
  • FailedMethod:最後一個編譯失敗任務所在的類及方法

示例三: -gc

顯示gc相關的堆信息,查看gc的次數,及時間。

jstat –gc <pid>
  • S0C:年輕代中第一個survivor(倖存區)的容量 (字節)
  • S1C:年輕代中第二個survivor(倖存區)的容量 (字節)
  • S0U :年輕代中第一個survivor(倖存區)目前已使用空間 (字節)
  • S1U :年輕代中第二個survivor(倖存區)目前已使用空間 (字節)
  • EC :年輕代中Eden(伊甸園)的容量 (字節)
  • EU :年輕代中Eden(伊甸園)目前已使用空間 (字節)
  • OC :Old代的容量 (字節)
  • OU :Old代目前已使用空間 (字節)
  • MC:metaspace(元空間)的容量 (字節)
  • MU:metaspace(元空間)目前已使用空間 (字節)
  • YGC :從應用程序啓動到採樣時年輕代中gc次數
  • YGCT :從應用程序啓動到採樣時年輕代中gc所用時間(s)
  • FGC :從應用程序啓動到採樣時old代(全gc)gc次數
  • FGCT :從應用程序啓動到採樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程序啓動到採樣時gc用的總時間(s)

示例四: -gccapacity

可以顯示,VM內存中三代(young,old,perm)對象的使用和佔用大小

jstat -gccapacity <pid>
  • NGCMN :年輕代(young)中初始化(最小)的大小(字節)
  • NGCMX :年輕代(young)的最大容量 (字節)
  • NGC :年輕代(young)中當前的容量 (字節)
  • S0C :年輕代中第一個survivor(倖存區)的容量 (字節)
  • S1C : 年輕代中第二個survivor(倖存區)的容量 (字節)
  • EC :年輕代中Eden(伊甸園)的容量 (字節)
  • OGCMN :old代中初始化(最小)的大小 (字節)
  • OGCMX :old代的最大容量(字節)
  • OGC:old代當前新生成的容量 (字節)
  • OC :Old代的容量 (字節)
  • MCMN:metaspace(元空間)中初始化(最小)的大小 (字節)
  • MCMX :metaspace(元空間)的最大容量 (字節)
  • MC :metaspace(元空間)當前新生成的容量 (字節)
  • CCSMN:最小壓縮類空間大小
  • CCSMX:最大壓縮類空間大小
  • CCSC:當前壓縮類空間大小
  • YGC :從應用程序啓動到採樣時年輕代中gc次數
  • FGC:從應用程序啓動到採樣時old代(全gc)gc次數

示例五:-gcmetacapacity

metaspace 中對象的信息及其佔用量。

jstat -gcmetacapacity<pid>
  • MCMN:最小元數據容量
  • MCMX:最大元數據容量
  • MC:當前元數據空間大小
  • CCSMN:最小壓縮類空間大小
  • CCSMX:最大壓縮類空間大小
  • CCSC:當前壓縮類空間大小
  • YGC :從應用程序啓動到採樣時年輕代中gc次數
  • FGC :從應用程序啓動到採樣時old代(全gc)gc次數
  • FGCT :從應用程序啓動到採樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程序啓動到採樣時gc用的總時間(s)

示例六: -gcnew

年輕代對象的信息。

jstat -gcnew <pid>
  • S0C :年輕代中第一個survivor(倖存區)的容量 (字節)
  • S1C :年輕代中第二個survivor(倖存區)的容量 (字節)
  • S0U :年輕代中第一個survivor(倖存區)目前已使用空間 (字節)
  • S1U :年輕代中第二個survivor(倖存區)目前已使用空間 (字節)
  • TT:持有次數限制
  • MTT:最大持有次數限制
  • DSS:期望的倖存區大小
  • EC:年輕代中Eden(伊甸園)的容量 (字節)
  • EU :年輕代中Eden(伊甸園)目前已使用空間 (字節)
  • YGC :從應用程序啓動到採樣時年輕代中gc次數
  • YGCT:從應用程序啓動到採樣時年輕代中gc所用時間(s)

示例七: -gcnewcapacity

年輕代對象的信息及其佔用量

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次數

示例八: -gcold

old代對象的信息

jstat -gcold <pid>
  • MC :metaspace(元空間)的容量 (字節)
  • MU:metaspace(元空間)目前已使用空間 (字節)
  • CCSC:壓縮類空間大小
  • CCSU:壓縮類空間使用大小
  • OC:Old代的容量 (字節)
  • OU:Old代目前已使用空間 (字節)
  • YGC:從應用程序啓動到採樣時年輕代中gc次數
  • FGC:從應用程序啓動到採樣時old代(全gc)gc次數
  • FGCT:從應用程序啓動到採樣時old代(全gc)gc所用時間(s)
  • GCT:從應用程序啓動到採樣時gc用的總時間(s)

示例九:-gcoldcapacity

old代對象的信息及其佔用量

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

示例十: - gcutil

統計gc信息

jstat -gcutil <pid>
  • 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)

示例十一:-gccause

顯示垃圾回收的相關信息(通-gcutil),同時顯示最後一次或當前正在發生的垃圾回收的誘因。

jstat -gccause <pid>
  • LGCC:最後一次GC原因
  • GCC:當前GC原因(No GC 爲當前沒有執行GC)

示例十二: -printcompilation

當前VM執行的信息。

jstat -printcompilation <pid>
  • Compiled :編譯任務的數目
  • Size :方法生成的字節碼的大小
  • Type:編譯類型
  • Method:類名和方法名用來標識編譯的方法。類名使用/做爲一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設置的

想了解更多精彩內容請關注我的公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章