jstat(JVM Statistics Monitoring Tool)是用於監控虛擬機各種運行狀態信息的命令行工具。他可以顯示本地或遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據,在沒有GUI圖形的服務器上,它是運行期定位虛擬機性能問題的首選工具。
一、介紹
二、參數及用法
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
Definitions:
<option> An option reported by the -options option
<vmid> Virtual Machine Identifier. A vmid takes the following form:
<lvmid>[@<hostname>[:<port>]]
Where <lvmid> is the local vm identifier for the target
Java virtual machine, typically a process id; <hostname> is
the name of the host running the target Java virtual machine;
and <port> is the port number for the rmiregistry on the
target host. See the jvmstat documentation for a more complete
description of the Virtual Machine Identifier.
<lines> Number of samples between header lines.
<interval> Sampling interval. The following forms are allowed:
<n>["ms"|"s"]
Where <n> is an integer and the suffix specifies the units as
milliseconds("ms") or seconds("s"). The default units are "ms".
<count> Number of samples to take before terminating.
-J<flag> Pass <flag> directly to the runtime system.
參數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代表這用戶希望查詢的虛擬機信息,主要分為3類:類裝載、垃圾收集和運行期編譯狀況,具體選項及作用如下:
常見的有
- 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編譯統計)
三、實例使用
實例使用1:統計gc信息

各列意義:
S0 S1 E O P YGC YGCT FGC FGCT GCT 11.63 0.00 56.46 66.92 98.49 162 0.248 6 0.331 0.579

實例使用2:(25444是java的進程號,ps -ef | grep java)
S0 S1 E O P YGC YGCT FGC FGCT GCT 73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583 73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583 73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583 73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583 73.54 0.00 99.04 67.52 98.49 166 0.252 6 0.331 0.583
各列意義:
實例使用3:jstat -class pid:顯示加載class的數量,及所占空間等信息。
Loaded Bytes Unloaded Bytes Time 2629 2916.8 29 24.6 0.90
Loaded
裝載的類的數量
Bytes
裝載類所占用的字節數
Unloaded
卸載類的數量
Bytes
卸載類的字節數
Time
裝載和卸載類所花費的時間
實例使用4:jstat -compiler pid:顯示VM實時編譯的數量等信息
Compiled Failed Invalid Time FailedType FailedMethod 768 0 0 0.70 0
Compiled
編譯任務執行數量
Failed
編譯任務執行失敗數量
Invalid
編譯任務執行失效數量
Time
編譯任務消耗時間
FailedType
最后一個編譯失敗任務的類型
FailedMethod
最后一個編譯失敗任務所在的類及方法
實例使用5:jstat –gccapacity
NGCMN 640.0 NGCMX 4992.0 NGC 832.0 S0C 64.0 S1C 64.0 EC 704.0 OGCMN 1408.0 OGCMX 60544.0 OGC 9504.0 OC 9504.0 OC是old內純的占用量 PGCMN 8192.0 PGCMN顯示的是最小perm的內存使用量 PGCMX 65536.0 PGCMX顯示的是perm的內存最大使用量 PGC 12800.0 PGC是當前新生成的perm內存占用量 PC 12800.0 PC是但前perm內存占用量 YGC 164 FGC 6
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次數
實例使用6:jstat -gcnew pid: new對象的信息
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 64.0 64.0 47.4 0.0 2 15 32.0 704.0 145.7 168 0.254
S0C
年輕代中第一個survivor(幸存區)的容量 (字節)
S1C
年輕代中第二個survivor(幸存區)的容量 (字節)
S0U
年輕代中第一個survivor(幸存區)目前已使用空間 (字節)
S1U
年輕代中第二個survivor(幸存區)目前已使用空間 (字節)
TT
持有次數限制 MTT
最大持有次數限制
EC
年輕代中Eden(伊甸園)的容量 (字節)
EU
年輕代中Eden(伊甸園)目前已使用空間 (字節)
YGC
從應用程序啟動到采樣時年輕代中gc次數
YGCT
從應用程序啟動到采樣時年輕代中gc所用時間(s)
實例使用7:jstat -gcnewcapacity pid: new對象的信息及其占用量
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 PU OC OU YGC FGC FGCT GCT 12800.0 12617.6 9504.0 6561.3 169 6 0.335 0.591
PC
Perm(持久代)的容量 (字節)
PU
Perm(持久代)目前已使用空間 (字節)
OC
Old代的容量 (字節)
OU
Old代目前已使用空間 (字節)
YGC
從應用程序啟動到采樣時年輕代中gc次數
FGC
從應用程序啟動到采樣時old代(全gc)gc次數
FGCT
從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
GCT
從應用程序啟動到采樣時gc用的總時間(s)
實例使用9:jstat -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 PGCMX PGC PC YGC FGC FGCT GCT 8192.0 65536.0 12800.0 12800.0 169 6 0.335 0.591
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 pid:當前VM執行的信息。
Compiled Size Type Method 788 73 1 java/io/File <init> 788 73 1 java/io/File <init> 788 73 1 java/io/File <init> Compiled Size Type Method 788 73 1 java/io/File <init> 788 73 1 java/io/File <init>
Compiled
編譯任務的數目
Size
方法生成的字節碼的大小
Type
編譯類型
Method
類名和方法名用來標識編譯的方法。
類名使用/做為一個命名空間分隔符。方法名是給定類中的方法。上述格式是由-XX:+PrintComplation選項進行設置的