jstat(JVM Statistics Monitoring Tool)
jstat(JVM Statistics Monitoring Tool)是用于監(jiān)控虛擬機各種運行狀態(tài)信息的命令行工具赞厕。他可以顯示本地或遠程虛擬機進程中的類裝載、內(nèi)存统舀、垃圾收集豺型、JIT編譯等運行數(shù)據(jù)送火,在沒有GUI圖形的服務(wù)器上联贩,它是運行期定位虛擬機性能問題的首選工具。
jstat位于java的bin目錄下泊碑,主要利用JVM內(nèi)建的指令對Java應(yīng)用程序的資源和性能進行實時的命令行的監(jiān)控坤按,包括了對Heap size和垃圾回收狀況的監(jiān)控÷可見臭脓,Jstat是輕量級的、專門針對JVM的工具腹忽,非常適用来累。
jstat 命令格式
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
參數(shù)解釋:
Option — 選項,我們一般使用 -gcutil 查看gc情況
vmid — VM的進程號窘奏,即當(dāng)前運行的java進程號
interval– 間隔時間嘹锁,單位為秒或者毫秒
count — 打印次數(shù),如果缺省則打印無數(shù)次
參數(shù)interval和count代表查詢間隔和次數(shù)着裹,如果省略這兩個參數(shù)领猾,說明只查詢一次。
假設(shè)需要每250毫秒查詢一次進程5828垃圾收集狀況骇扇,一共查詢5次摔竿,那命令行如下:
jstat -gc 5828 250 5
對于命令格式中的VMID與LVMID需要特別說明下:如果是本地虛擬機進程,VMID(Virtual Machine IDentifier,虛機標識符)和LVMID(Local Virtual Machine IDentifier,虛機標識符)是一致的匠题,如果是遠程虛擬機進程拯坟,那VMID的格式應(yīng)當(dāng)是:[protocol:][//] lvmid [@hostname[:port]/servername]
option
選項option代表這用戶希望查詢的虛擬機信息,主要分為3類:類裝載韭山、垃圾收集和運行期編譯狀況郁季,具體選項及作用如下:
- –class 監(jiān)視類裝載冷溃、卸載數(shù)量、總空間及類裝載所耗費的時間
- –gc 監(jiān)視Java堆狀況梦裂,包括Eden區(qū)似枕、2個Survivor區(qū)、老年代年柠、永久代等的容量
- –gccapacity 監(jiān)視內(nèi)容與-gc基本相同凿歼,但輸出主要關(guān)注Java堆各個區(qū)域使用到的最大和最小空間
- –gcutil 監(jiān)視內(nèi)容與-gc基本相同,但輸出主要關(guān)注已使用空間占總空間的百分比
- –gcnew 監(jiān)視新生代GC的狀況
- –gcnewcapacity 監(jiān)視內(nèi)容與-gcnew基本相同冗恨,輸出主要關(guān)注使用到的最大和最小空間
- –gcold 監(jiān)視老年代GC的狀況
- –gcoldcapacity 監(jiān)視內(nèi)容與-gcold基本相同答憔,輸出主要關(guān)注使用到的最大和最小空間
- –gcpermcapacity 輸出永久代使用到的最大和最小空間
- –compiler 輸出JIT編譯器編譯過的方法、耗時等信息
- –printcompilation 輸出已經(jīng)被JIT編譯的方法
常見術(shù)語
1. jstat –class<pid> : 顯示加載class的數(shù)量掀抹,及所占空間等信息虐拓。
- Loaded 裝載的類的數(shù)量
- Bytes 裝載類所占用的字節(jié)數(shù)
- Unloaded 卸載類的數(shù)量
- Bytes 卸載類的字節(jié)數(shù)
- Time 裝載和卸載類所花費的時間
2. jstat -compiler <pid>顯示VM實時編譯的數(shù)量等信息。
- Compiled 編譯任務(wù)執(zhí)行數(shù)量
- Failed 編譯任務(wù)執(zhí)行失敗數(shù)量
- Invalid 編譯任務(wù)執(zhí)行失效數(shù)量
- Time 編譯任務(wù)消耗時間
- FailedType 最后一個編譯失敗任務(wù)的類型
- FailedMethod 最后一個編譯失敗任務(wù)所在的類及方法
3傲武、jstat -gc <pid>: 可以顯示gc的信息蓉驹,查看gc的次數(shù),及時間揪利。
- S0C 年輕代中第一個survivor(幸存區(qū))的容量 (字節(jié))
- S1C 年輕代中第二個survivor(幸存區(qū))的容量 (字節(jié))
- S0U 年輕代中第一個survivor(幸存區(qū))目前已使用空間 (字節(jié))
- S1U 年輕代中第二個survivor(幸存區(qū))目前已使用空間 (字節(jié))
- EC 年輕代中Eden(伊甸園)的容量 (字節(jié))
- EU 年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))
- OC Old代的容量 (字節(jié))
- OU Old代目前已使用空間 (字節(jié))
- PC Perm(持久代)的容量 (字節(jié))
- PU Perm(持久代)目前已使用空間 (字節(jié))
- YGC 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù)
- YGCT 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c所用時間(s)
- FGC 從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù)
- FGCT 從應(yīng)用程序啟動到采樣時old代(全gc)gc所用時間(s)
- GCT 從應(yīng)用程序啟動到采樣時gc用的總時間(s)
4态兴、jstat -gccapacity <pid>:可以顯示,VM內(nèi)存中三代(young,old,perm)對象的使用和占用大小
- NGCMN 年輕代(young)中初始化(最小)的大小(字節(jié))
- NGCMX 年輕代(young)的最大容量 (字節(jié))
- NGC 年輕代(young)中當(dāng)前的容量 (字節(jié))
- S0C 年輕代中第一個survivor(幸存區(qū))的容量 (字節(jié))
- S1C 年輕代中第二個survivor(幸存區(qū))的容量 (字節(jié))
- EC 年輕代中Eden(伊甸園)的容量 (字節(jié))
- OGCMN old代中初始化(最小)的大小 (字節(jié))
- OGCMX old代的最大容量(字節(jié))
- OGC old代當(dāng)前新生成的容量 (字節(jié))
- OC Old代的容量 (字節(jié))
- PGCMN perm代中初始化(最小)的大小 (字節(jié))
- PGCMX perm代的最大容量 (字節(jié))
- PGC perm代當(dāng)前新生成的容量 (字節(jié))
- PC Perm(持久代)的容量 (字節(jié))
- YGC 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù)
- FGC 從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù)
5疟位、jstat -gcutil <pid>:統(tǒng)計gc信息
- S0 年輕代中第一個survivor(幸存區(qū))已使用的占當(dāng)前容量百分比
- S1 年輕代中第二個survivor(幸存區(qū))已使用的占當(dāng)前容量百分比
- E 年輕代中Eden(伊甸園)已使用的占當(dāng)前容量百分比
- O old代已使用的占當(dāng)前容量百分比
- P perm代已使用的占當(dāng)前容量百分比
- YGC 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù)
- YGCT 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c所用時間(s)
- FGC 從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù)
- FGCT 從應(yīng)用程序啟動到采樣時old代(全gc)gc所用時間(s)
- GCT 從應(yīng)用程序啟動到采樣時gc用的總時間(s)
6瞻润、jstat -gcnew <pid>:年輕代對象的信息。
- S0C 年輕代中第一個survivor(幸存區(qū))的容量 (字節(jié))
- S1C 年輕代中第二個survivor(幸存區(qū))的容量 (字節(jié))
- S0U 年輕代中第一個survivor(幸存區(qū))目前已使用空間 (字節(jié))
- S1U 年輕代中第二個survivor(幸存區(qū))目前已使用空間 (字節(jié))
- TT 持有次數(shù)限制
- MTT 最大持有次數(shù)限制
- EC 年輕代中Eden(伊甸園)的容量 (字節(jié))
- EU 年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))
- YGC 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù)
- YGCT 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c所用時間(s)
7献汗、jstat -gcnewcapacity<pid>: 年輕代對象的信息及其占用量敢订。
- NGCMN 年輕代(young)中初始化(最小)的大小(字節(jié))
- NGCMX 年輕代(young)的最大容量 (字節(jié))
- NGC 年輕代(young)中當(dāng)前的容量 (字節(jié))
- S0CMX 年輕代中第一個survivor(幸存區(qū))的最大容量 (字節(jié))
- S0C 年輕代中第一個survivor(幸存區(qū))的容量 (字節(jié))
- S1CMX 年輕代中第二個survivor(幸存區(qū))的最大容量 (字節(jié))
- S1C 年輕代中第二個survivor(幸存區(qū))的容量 (字節(jié))
- ECMX 年輕代中Eden(伊甸園)的最大容量 (字節(jié))
- EC 年輕代中Eden(伊甸園)的容量 (字節(jié))
- YGC 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù)
- FGC 從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù)
8、jstat -gcold <pid>:old代對象的信息罢吃。
- PC Perm(持久代)的容量 (字節(jié))
- PU Perm(持久代)目前已使用空間 (字節(jié))
- OC Old代的容量 (字節(jié))
- OU Old代目前已使用空間 (字節(jié))
- YGC 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù)
- FGC 從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù)
- FGCT 從應(yīng)用程序啟動到采樣時old代(全gc)gc所用時間(s)
- GCT 從應(yīng)用程序啟動到采樣時gc用的總時間(s)
9、stat -gcoldcapacity <pid>: old代對象的信息及其占用量昭齐。
- OGCMN old代中初始化(最小)的大小 (字節(jié))
- OGCMX old代的最大容量(字節(jié))
- OGC old代當(dāng)前新生成的容量 (字節(jié))
- OC Old代的容量 (字節(jié))
- YGC 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù)
- FGC 從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù)
- FGCT 從應(yīng)用程序啟動到采樣時old代(全gc)gc所用時間(s)
- GCT 從應(yīng)用程序啟動到采樣時gc用的總時間(s)
10尿招、jstat -gcpermcapacity<pid>: perm對象的信息及其占用量。
- PGCMN perm代中初始化(最小)的大小 (字節(jié))
- PGCMX perm代的最大容量 (字節(jié))
- PGC perm代當(dāng)前新生成的容量 (字節(jié))
- PC Perm(持久代)的容量 (字節(jié))
- YGC 從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù)
- FGC 從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù)
- FGCT 從應(yīng)用程序啟動到采樣時old代(全gc)gc所用時間(s)
- GCT 從應(yīng)用程序啟動到采樣時gc用的總時間(s)
11阱驾、jstat -printcompilation <pid>:當(dāng)前VM執(zhí)行的信息就谜。
- Compiled 編譯任務(wù)的數(shù)目
- Size 方法生成的字節(jié)碼的大小
- Type 編譯類型
- Method 類名和方法名用來標識編譯的方法。類名使用/做為一個命名空間分隔符里覆。方法名是給定類中的方法丧荐。上述格式是由-XX:+PrintComplation選項進行設(shè)置的