參考Oracle文章:https://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html
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
(Virtual Machine IDentifier,虛機辨別符)和
VMID
(Local Virtual Machine IDentifier,虛機辨別符)是一緻的,如果是遠端虛拟機程序,那VMID的格式應當是:
LVMID
[protocol:][//] lvmid [@hostname[:port]/servername]
option
選項option代表這使用者希望查詢的虛拟機資訊,主要分為3類:類裝載、垃圾收集和運作期編譯狀況,具體選項及作用如下:
– 監視類裝載、解除安裝數量、總空間及類裝載所耗費的時間 –
class
監視Java堆狀況,包括Eden區、2個Survivor區、老年代、永久代等的容量 –
gc
監視内容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大和最小空間 –
gccapacity
監視内容與-gc基本相同,但輸出主要關注已使用空間占總空間的百分比 –
gcutil
與-gcutil功能一樣,但是會額外輸出導緻上一次GC産生的原因 –
gccause
監視新生代GC的狀況 –
gcnew
監視内容與-gcnew基本相同,輸出主要關注使用到的最大和最小空間 –
gcnewcapacity
監視老年代GC的狀況 –
gcold
監視内容與——gcold基本相同,輸出主要關注使用到的最大和最小空間 –
gcoldcapacity
輸出永久代使用到的最大和最小空間 –
gcpermcapacity
輸出JIT編譯器編譯過的方法、耗時等資訊 –
compiler
輸出已經被JIT編譯的方法
printcompilation
常見術語
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)
從應用程式啟動到采樣時gc用的總時間(s)
GCT
4、
jstat -gccapacity <pid>:
可以顯示,VM記憶體中三代(young,old,perm)對象的使用和占用大小
年輕代(young)中初始化(最小)的大小(位元組)
NGCMN
年輕代(young)的最大容量 (位元組)
NGCMX
年輕代(young)中目前的容量 (位元組)
NGC
年輕代中第一個survivor(幸存區)的容量 (位元組)
S0C
年輕代中第二個survivor(幸存區)的容量 (位元組)
S1C
年輕代中Eden(伊甸園)的容量 (位元組)
EC
old代中初始化(最小)的大小 (位元組)
OGCMN
old代的最大容量(位元組)
OGCMX
old代目前新生成的容量 (位元組)
OGC
Old代的容量 (位元組)
OC
perm代中初始化(最小)的大小 (位元組)
PGCMN
PGCMX
perm代的最大容量 (位元組)
perm代目前新生成的容量 (位元組)
PGC
Perm(持久代)的容量 (位元組)
PC
從應用程式啟動到采樣時年輕代中gc次數
YGC
從應用程式啟動到采樣時old代(全gc)gc次數
FGC
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)
從應用程式啟動到采樣時gc用的總時間(s)
GCT
6、
jstat -gcnew <pid>
:年輕代對象的資訊。
年輕代中第一個survivor(幸存區)的容量 (位元組)
S0C
年輕代中第二個survivor(幸存區)的容量 (位元組)
S1C
年輕代中第一個survivor(幸存區)目前已使用空間 (位元組)
S0U
年輕代中第二個survivor(幸存區)目前已使用空間 (位元組)
S1U
持有次數限制
TT
最大持有次數限制
MTT
年輕代中Eden(伊甸園)的容量 (位元組)
EC
年輕代中Eden(伊甸園)目前已使用空間 (位元組)
EU
從應用程式啟動到采樣時年輕代中gc次數
YGC
從應用程式啟動到采樣時年輕代中gc所用時間(s)
YGCT
7、
jstat -gcnewcapacity<pid>
: 年輕代對象的資訊及其占用量。
年輕代(young)中初始化(最小)的大小(位元組)
NGCMN
年輕代(young)的最大容量 (位元組)
NGCMX
年輕代(young)中目前的容量 (位元組)
NGC
年輕代中第一個survivor(幸存區)的最大容量 (位元組)
S0CMX
年輕代中第一個survivor(幸存區)的容量 (位元組)
S0C
年輕代中第二個survivor(幸存區)的最大容量 (位元組)
S1CMX
年輕代中第二個survivor(幸存區)的容量 (位元組)
S1C
年輕代中Eden(伊甸園)的最大容量 (位元組)
ECMX
年輕代中Eden(伊甸園)的容量 (位元組)
EC
從應用程式啟動到采樣時年輕代中gc次數
YGC
從應用程式啟動到采樣時old代(全gc)gc次數
FGC
8、
jstat -gcold <pid>:
old代對象的資訊。
Perm(持久代)的容量 (位元組)
PC
Perm(持久代)目前已使用空間 (位元組)
PU
Old代的容量 (位元組)
OC
Old代目前已使用空間 (位元組)
OU
從應用程式啟動到采樣時年輕代中gc次數
YGC
從應用程式啟動到采樣時old代(全gc)gc次數
FGC
從應用程式啟動到采樣時old代(全gc)gc所用時間(s)
FGCT
從應用程式啟動到采樣時gc用的總時間(s)
GCT
9、
stat -gcoldcapacity <pid>
: old代對象的資訊及其占用量。
old代中初始化(最小)的大小 (位元組)
OGCMN
old代的最大容量(位元組)
OGCMX
old代目前新生成的容量 (位元組)
OGC
Old代的容量 (位元組)
OC
從應用程式啟動到采樣時年輕代中gc次數
YGC
從應用程式啟動到采樣時old代(全gc)gc次數
FGC
從應用程式啟動到采樣時old代(全gc)gc所用時間(s)
FGCT
從應用程式啟動到采樣時gc用的總時間(s)
GCT
10、
jstat -gcpermcapacity<pid>
: perm對象的資訊及其占用量。
perm代中初始化(最小)的大小 (位元組)
PGCMN
PGCMX
perm代的最大容量 (位元組)
perm代目前新生成的容量 (位元組)
PGC
Perm(持久代)的容量 (位元組)
PC
從應用程式啟動到采樣時年輕代中gc次數
YGC
從應用程式啟動到采樣時old代(全gc)gc次數
FGC
從應用程式啟動到采樣時old代(全gc)gc所用時間(s)
FGCT
從應用程式啟動到采樣時gc用的總時間(s)
GCT