對於監控JVM,jdk也提供了很多工具,供我們來使用,其中命令jstat,是JDK自帶的一個輕量級小工具,可以查看堆內存各部分的使用量,以及加載類的數量,對Java應用程序的資源和性能進行實時的監控,包括了對Heap size和垃圾回收狀況的監控。命令行輸入jstat可以查看這個命令的用法。
用法格式爲:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
- option: 參數選項
- -t: 可以在打印的列加上Timestamp列,用於顯示系統運行的時間
- -h: 可以在週期性數據數據的時候,可以在指定輸出多少行以後輸出一次表頭
- vmid: Virtual Machine ID( 進程的 pid)
- interval: 執行每次的間隔時間,單位爲毫秒
- count: 用於指定輸出多少次記錄,缺省則會一直打印
輸入jstat -options可以查看參數選擇:
各個參數含義如下:
- -class 顯示ClassLoad的相關信息;
- -compiler 顯示JIT編譯的相關信息;
- -gc 顯示和gc相關的堆信息;
- -gccapacity 顯示各個代的容量以及使用情況;
- -gccause 顯示垃圾回收的相關信息(通-gcutil),同時顯示最後一次或當前正在發生的垃圾回收的誘因;
- -gcmetacapacity 顯示metaspace的大小
- -gcnew 顯示新生代信息;
- -gcnewcapacity 顯示新生代大小和使用情況;
- -gcold 顯示老年代和永久代的信息;
- -gcoldcapacity 顯示老年代的大小;
- -gcutil 顯示垃圾收集信息;
- -printcompilation 輸出JIT編譯的方法信息;
下面通過實例來看一下jstat -options各個參數,首先要用jps工具找出一個Java程序對於的PID:
參數-class :
Loaded : 已經裝載的類的數量
Bytes : 裝載類所佔用的字節數
Unloaded:已經卸載類的數量
Bytes:卸載類的字節數
Time:裝載和卸載類所花費的時間
參數-compiler:
Compiled:編譯任務執行數量
Failed:編譯任務執行失敗數量
Invalid :編譯任務執行失效數量
Time :編譯任務消耗時間
FailedType:最後一個編譯失敗任務的類型
FailedMethod:最後一個編譯失敗任務所在的類及方法
參數-gc:
S0C:年輕代中第一個survivor(倖存區)的容量 (字節)
S1C:年輕代中第二個survivor(倖存區)的容量 (字節)
S0U :年輕代中第一個survivor(倖存區)目前已使用空間 (字節)
S1U :年輕代中第二個survivor(倖存區)目前已使用空間 (字節)
EC :年輕代中Eden(伊甸園)的容量 (字節)
EU :年輕代中Eden(伊甸園)目前已使用空間 (字節)
OC :Old代的容量 (字節)
OU :Old代目前已使用空間 (字節)
MC:metaspace(元空間)的容量 (字節)
MU:metaspace(元空間)目前已使用空間 (字節)
CCSC:壓縮類空間大小
CCSU:壓縮類空間使用大小
YGC :從應用程序啓動到採樣時年輕代中gc次數
YGCT :從應用程序啓動到採樣時年輕代中gc所用時間(s)
FGC :從應用程序啓動到採樣時old代(全gc)gc次數
FGCT :從應用程序啓動到採樣時old代(全gc)gc所用時間(s)
GCT:從應用程序啓動到採樣時gc用的總時間(s)
參數-gccapacity:
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次數
參數-gccause:
S0 :年輕代中第一個survivor(倖存區)已使用的佔當前容量百分比
S1 :年輕代中第二個survivor(倖存區)已使用的佔當前容量百分比
E :年輕代中Eden(伊甸園)已使用的佔當前容量百分比
O :old代已使用的佔當前容量百分比
M :元空間已使用的佔當前容量百分比
CCS:壓縮類佔當前容量百分比
YGC :從應用程序啓動到採樣時年輕代中gc次數
YGCT :從應用程序啓動到採樣時年輕代中gc所用時間(s)
FGC :從應用程序啓動到採樣時old代(全gc)gc次數
FGCT :從應用程序啓動到採樣時old代(全gc)gc所用時間(s)
GCT:從應用程序啓動到採樣時gc用的總時間(s)
LGCC:最後一次GC原因
GCC:當前GC原因(No GC 爲當前沒有執行GC)
參數-gcmetacapacity:
MCMN:最小元數據容量
MCMX:最大元數據容量
MC:當前元數據空間大小
CCSMN:最小壓縮類空間大小
CCSMX:最大壓縮類空間大小
CCSC:當前壓縮類空間大小
YGC :從應用程序啓動到採樣時年輕代中gc次數
FGC :從應用程序啓動到採樣時old代(全gc)gc次數
FGCT :從應用程序啓動到採樣時old代(全gc)gc所用時間(s)
GCT:從應用程序啓動到採樣時gc用的總時間(s)
參數 -gcnew:
S0C :年輕代中第一個survivor(倖存區)的容量 (字節)
S1C :年輕代中第二個survivor(倖存區)的容量 (字節)
S0U :年輕代中第一個survivor(倖存區)目前已使用空間 (字節)
S1U :年輕代中第二個survivor(倖存區)目前已使用空間 (字節)
TT:持有次數限制
MTT:最大持有次數限制
DSS:期望的倖存區大小
EC:年輕代中Eden(伊甸園)的容量 (字節)
EU :年輕代中Eden(伊甸園)目前已使用空間 (字節)
YGC :從應用程序啓動到採樣時年輕代中gc次數
YGCT:從應用程序啓動到採樣時年輕代中gc所用時間(s)
參數-gcnewcapacity:
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:
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:
OGCMN :old代中初始化(最小)的大小 (字節)
OGCMX :old代的最大容量(字節)
OGC :old代當前新生成的容量 (字節)
OC :Old代的容量 (字節)
YGC :從應用程序啓動到採樣時年輕代中gc次數
FGC :從應用程序啓動到採樣時old代(全gc)gc次數
FGCT :從應用程序啓動到採樣時old代(全gc)gc所用時間(s)
GCT:從應用程序啓動到採樣時gc用的總時間(s)
參數-gcutil:
S0 :年輕代中第一個survivor(倖存區)已使用的佔當前容量百分比
S1 :年輕代中第二個survivor(倖存區)已使用的佔當前容量百分比
E :年輕代中Eden(伊甸園)已使用的佔當前容量百分比
O :old代已使用的佔當前容量百分比
M :元空間已使用的佔當前容量百分比
CCS:壓縮類佔當前容量百分比
YGC :從應用程序啓動到採樣時年輕代中gc次數
YGCT :從應用程序啓動到採樣時年輕代中gc所用時間(s)
FGC :從應用程序啓動到採樣時old代(全gc)gc次數
FGCT :從應用程序啓動到採樣時old代(全gc)gc所用時間(s)
GCT:從應用程序啓動到採樣時gc用的總時間(s)
參數-printcompilation:
Compiled :編譯任務的數目
Size :方法生成的字節碼的大小
Type:編譯類型
Method:類名和方法名用來標識編譯的方法。類名使用/做爲一個命名空間分隔符。方法名是給定類中的方法。
上述格式是由-XX:+PrintComplation選項進行設置的
對於用法格式爲:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]],我們知道了-options的用法,和vmid: Virtual Machine ID( 進程的 pid),下面加上時間戳-t選項,和interval指定時間爲1s:
如果沒有指定count,則會一直打印下去,下面我們指定5次來演示一下:
這樣在第5次打印完畢,就會停止打印!