天天看點

[Java基礎]--Java指令學習系列(四)——jstat

參考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​

​​需要特别說明下:如果是本地虛拟機程序,​

​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基本相同,但輸出主要關注已使用空間占總空間的百分比 –​

​gccause​

​​ 與-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)