jstat的用法
用以判斷JVM是否存在內存問題呢?如何判斷JVM垃圾回收是否正常?一般的top指令基本上滿足不了這樣的需求,因爲它主要監控的是總體的系統資源,很難定位到java應用程序。
Jstat是JDK自帶的一個輕量級小工具。全稱“Java Virtual Machine statistics monitoring tool”,它位於java的bin目錄下,主要利用JVM內建的指令對Java應用程序的資源和性能進行實時的命令行的監控,包括了對Heap size和垃圾回收狀況的監控。可見,Jstat是輕量級的、專門針對JVM的工具,非常適用。由於JVM內存設置較大,圖中百分比變化不太明顯
一個極強的監視VM內存工具。可以用來監視VM內存內的各種堆和非堆的大小及其內存使用量。
jstat工具特別強大,有衆多的可選項,詳細查看堆內各個部分的使用量,以及加載類的數量。使用時,需加上查看進程的進程id,和所選參數。
執行:cd $JAVA_HOME/bin中執行jstat,注意jstat後一定要跟參數。
語法結構:
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
參數解釋:
Options — 選項,我們一般使用 -gcutil 查看gc情況
可以列出當前JVM版本支持的選項,常見的有
l class (類加載器)
l compiler (JIT)
l gc (GC堆狀態)
l gccapacity (各區大小)
l gccause (最近一次GC統計和原因)
l gcnew (新區統計)
l gcnewcapacity (新區大小)
l gcold (老區統計)
l gcoldcapacity (老區大小)
l gcpermcapacity (永久區大小)
l gcutil (GC統計彙總)
l printcompilation (HotSpot編譯統計)
vmid — VM的進程號,即當前運行的java進程號
interval– 間隔時間,單位爲秒或者毫秒
count — 打印次數,如果缺省則打印無數次
S0 — Heap上的 Survivor space 0 區已使用空間的百分比
S1 — Heap上的 Survivor space 1 區已使用空間的百分比
E — Heap上的 Eden space 區已使用空間的百分比
O — Heap上的 Old space 區已使用空間的百分比
P — Perm space 區已使用空間的百分比
YGC — 從應用程序啓動到採樣時發生 Young GC 的次數
YGCT– 從應用程序啓動到採樣時 Young GC 所用的時間(單位秒)
FGC — 從應用程序啓動到採樣時發生 Full GC 的次數
FGCT– 從應用程序啓動到採樣時 Full GC 所用的時間(單位秒)
GCT — 從應用程序啓動到採樣時用於垃圾回收的總時間(單位秒)
1、jstat –class : 顯示加載class的數量,及所佔空間等信息。
顯示列名 | 具體描述 |
---|---|
Loaded | 裝載的類的數量 |
Bytes | 裝載類所佔用的字節數 |
Unloaded | 卸載類的數量 |
Bytes | 卸載類的字節數 |
Time | 裝載和卸載類所花費的時間 |
2、jstat -compiler 顯示VM實時編譯的數量等信息。
顯示列名 | 具體描述 |
---|---|
Compiled | 編譯任務執行數量 |
Failed | 編譯任務執行失敗數量 |
Invalid | 編譯任務執行失效數量 |
Time | 編譯任務消耗時間 |
FailedType | 最後一個編譯失敗任務的類型 |
FailedMethod | 最後一個編譯失敗任務所在的類及方法 |
3、jstat -gc : 可以顯示gc的信息,查看gc的次數,及時間。
顯示列名 | 具體描述 |
---|---|
S0C | 年輕代中第一個survivor(倖存區)的容量 (字節) |
S1C | 年輕代中第二個survivor(倖存區)的容量 (字節) |
S0U | 年輕代中第一個survivor(倖存區)目前已使用空間 (字節) |
S1U | 年輕代中第二個survivor(倖存區)目前已使用空間 (字節) |
EC | 年輕代中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) |
5、jstat -gcutil :統計gc信息
顯示列名 | 具體描述 |
---|---|
NGCMN | 年輕代(young)中初始化(最小)的大小(字節) |
NGCMX | 年輕代(young)的最大容量 (字節) |
NGC | 年輕代(young)中當前的容量 (字節) |
S0C | 年輕代中第一個survivor(倖存區)的容量 (字節) |
S1C | 年輕代中Eden(伊甸園)的容量 (字節) |
OGCMN | old代中初始化(最小)的大小 (字節) |
OGCMX | old代的最大容量(字節) |
OGC | old代當前新生成的容量 (字節) |
OC | Old代的容量 (字節) |
PGCMN | perm代中初始化(最小)的大小 (字節) |
PGCMX | perm代的最大容量 (字節) |
PGC | perm代當前新生成的容量 (字節) |
PC | Perm(持久代)的容量 (字節) |
YGC | 從應用程序啓動到採樣時年輕代中gc次數 |
FGC | 從應用程序啓動到採樣時old代(全gc)gc次數 |
6、jstat -gcnew :年輕代對象的信息。
顯示列名 | 具體描述 |
---|---|
S0C | 年輕代中第一個survivor(倖存區)的容量 (字節) |
S1C | 年輕代中第二個survivor(倖存區)的容量 (字節) |
S0U | 年輕代中第一個survivor(倖存區)目前已使用空間 (字節) |
S1U | 年輕代中第二個survivor(倖存區)目前已使用空間 (字節) |
TT | 持有次數限制 |
MTT | 最大持有次數限制 |
EC | 年輕代中Eden(伊甸園)的容量 (字節) |
EU | 年輕代中Eden(伊甸園)目前已使用空間 (字節) |
YGC | 從應用程序啓動到採樣時年輕代中gc次數 |
YGCT | 從應用程序啓動到採樣時年輕代中gc所用時間(s) |
7、jstat -gcnewcapacity: 年輕代對象的信息及其佔用量。
顯示列名 | 具體描述 |
---|---|
NGCMN | 年輕代(young)中初始化(最小)的大小(字節) |
NGCMX | 年輕代(young)的最大容量 (字節) |
NGC | 年輕代(young)中當前的容量 (字節) |
S0CMX | 年輕代中第一個survivor(倖存區)的最大容量 (字節) |
S0C | 年輕代中第一個survivor(倖存區)的容量 (字節) |
S1CMX | 年輕代中第二個survivor(倖存區)的最大容量 (字節) |
S1C | 年輕代中Eden(伊甸園)的容量 (字節) |
ECMX | 年輕代中Eden(伊甸園)的最大容量 (字節) |
EC | 年輕代中Eden(伊甸園)的容量 (字節) |
YGC | 從應用程序啓動到採樣時年輕代中gc次數 |
FGC | 從應用程序啓動到採樣時old代(全gc)gc次數 |
8、jstat -gcold :old代對象的信息。
顯示列名 | 具體描述 |
---|---|
PC | Perm(持久代)的容量 (字節) |
PU | Perm(持久代)目前已使用空間 (字節) |
OC | Old代的容量 (字節) |
OU | Old代目前已使用空間 (字節) |
YGC | 從應用程序啓動到採樣時年輕代中gc次數 |
YGCT | 從應用程序啓動到採樣時年輕代中gc所用時間(s) |
FGC | 從應用程序啓動到採樣時old代(全gc)gc次數 |
9、stat -gcoldcapacity : 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: 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 :當前VM執行的信息。
顯示列名 | 具體描述 |
---|---|
Compiled | 編譯任務的數目 |
Size | 方法生成的字節碼的大小 |
Type | 編譯類型 |
Method | 類名和方法名用來標識編譯的方法。類名使用/做爲一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設置的 |
實例使用1:
root@BL-APP-3:~# jstat -gcutil 25574
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
45.19 0.00 67.93 0.62 98.24 96.48 4 0.535 3 0.277 0.813