Java命令學習系列(4)——jstat

cfcy9700 8年前發布 | 8K 次閱讀 Java SE Java開發

來自: http://www.importnew.com/18202.html

jstat(JVM Statistics Monitoring Tool)是用于監控虛擬機各種運行狀態信息的命令行工具。他可以顯示本地或遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據,在沒有GUI圖形的服務器上,它是運行期定位虛擬機性能問題的首選工具。

</div>

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]

</div>

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編譯的方法

</div>

常見術語

1、 jstat –class<pid> : 顯示加載class的數量,及所占空間等信息。

Loaded   裝載的類的數量

Bytes   裝載類所占用的字節數

Unloaded   卸載類的數量

Bytes 卸載類的字節數

Time 裝載和卸載類所花費的時間

</div>

2、 jstat -compiler <pid> 顯示VM實時編譯的數量等信息。

Compiled 編譯任務執行數量

Failed   編譯任務執行失敗數量

Invalid 編譯任務執行失效數量

Time 編譯任務消耗時間

FailedType 最后一個編譯失敗任務的類型

FailedMethod 最后一個編譯失敗任務所在的類及方法

</div>

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)

</div>

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

</div>

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)

</div>

6、 jstat -gcnew <pid> :年輕代對象的信息。

S0C   年輕代中第一個survivor(幸存區)的容量 (字節)

S1C 年輕代中第二個survivor(幸存區)的容量 (字節)

S0U 年輕代中第一個survivor(幸存區)目前已使用空間 (字節)

S1U   年輕代中第二個survivor(幸存區)目前已使用空間 (字節)

TT 持有次數限制

MTT 最大持有次數限制

EC 年輕代中Eden(伊甸園)的容量 (字節)

EU 年輕代中Eden(伊甸園)目前已使用空間 (字節)

YGC 從應用程序啟動到采樣時年輕代中gc次數

YGCT 從應用程序啟動到采樣時年輕代中gc所用時間(s)

</div>

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

</div>

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)

</div>

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)

</div>

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)

</div>

11、 jstat -printcompilation <pid> :當前VM執行的信息。

Compiled 編譯任務的數目

Size 方法生成的字節碼的大小

Type 編譯類型

Method 類名和方法名用來標識編譯的方法。類名使用/做為一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設置的

</div>

實例分析

未完待續。。。

本系列:

</div>

 本文由用戶 cfcy9700 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!