Jstat 是JDK自带的一个轻量级小工具。全称“Java Virtual
Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap
size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。
执行:cd
$JAVA_HOME/bin中执行jstat,注意jstat后一定要跟参数。
语法结构:
Usage: jstat -help|-options
jstat -
[-t]
[-h] [ []]
参数解释:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid
— VM的进程号,即当前运行的java进程号
interval[s|ms]
—— 间隔时间,单位为秒或者毫秒,默认为ms。必须是正整型。
count
— 打印次数,如果缺省则打印无数次
输出参数:
-hn 每个n行输出一次列表头。默认为0,仅输出一次。
-tn 在第一列输出时间戳。该时间戳从jvm启动开始。
-JjavaOption
具体参数:
-class: 统计class
loader 行为信息
-compiler: 统计编译行为信息
-gc:统计jdk
gc时heap信息
-gccapacity:统计不同的generations(新生代、老生代、永久代)相应的heap容量信息
-gccause:统计gc的情况,以及引起gc的事情。同-gcutil
-gcnew:统计新生代的gc情况
-gcnewcapacity:统计新生代gc时heap的容量信息
-gcold:统计老生代的gc情况
-gcoldcapacity:统计老生代gc时heap容量信息
-gcpermcapacity:统计永久代gc时的容量信息
-gcutil:统计heap的gc情况
-printcompilation:没用过
jstat -gcutil :
结果信息:
S0 — Heap上的 Survivor space
0 区已使用空间的百分比
S1 — Heap上的 Survivor space
1 区已使用空间的百分比
E — Heap上的 Eden
space 区已使用空间的百分比
O — Heap上的 Old
space 区已使用空间的百分比
P — Perm
space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young
GC 的次数
YGCT– 从应用程序启动到采样时 Young
GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full
GC 的次数
FGCT– 从应用程序启动到采样时 Full
GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
一.jstat -gc 12538 5000
即会每5秒一次显示进程号为12538的java进成的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)
NGCMN:年轻代(young)中初始化(最小)的大小
(字节)
NGCMX:年轻代(young)的最大容量
(字节)
NGC:年轻代(young)中当前的容量
(字节)
OGCMN:old代中初始化(最小)的大小
(字节)
OGCMX:old代的最大容量
(字节)
OGC:old代当前新生成的容量
(字节)
PGCMN:perm代中初始化(最小)的大小
(字节)
PGCMX:perm代的最大容量 (字节)
PGC:perm代当前新生成的容量
(字节)
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比
O:old代已使用的占当前容量百分比
P:perm代已使用的占当前容量百分比
S0CMX:年轻代中第一个survivor(幸存区)的最大容量
(字节)
S1CMX
:年轻代中第二个survivor(幸存区)的最大容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量
(字节)
DSS:当前需要survivor(幸存区)的容量
(字节)(Eden区已满)
TT:
持有次数限制
MTT :
最大持有次数限制
二.jstat -gcutil 21891 250 7
21891 进程号; 250ms 采样interval; 7
count
S0
S1
E
O
P
YGC
YGCT
FGC
FGCT
GCT
12.44 0.00
27.20 9.49
96.70
78
0.176
5
0.495
0.672
12.44 0.00
62.16 9.49
96.70
78
0.176
5
0.495
0.672
12.44 0.00
83.97 9.49
96.70
78
0.176
5
0.495
0.672
0.00
7.74
0.00 9.51
96.70
79
0.177
5
0.495
0.673
0.00
7.74
23.37 9.51
96.70
79
0.177
5
0.495
0.673
0.00
7.74
43.82 9.51
96.70
79
0.177
5
0.495
0.673
0.00
7.74
58.11 9.51
96.71
79
0.177
5
0.495
0.673
以上输出表明:
1. 在第三行与第四行,发生一次新生代gc。
本次gc耗时0.001秒,且有对象从Eden区提升到老生代,老生代使用率从9.49% 上升到9.51%。
2. gc之前,survivor
space 使用率12.44%, gc后,降为7.74%。
三.jstat -gcnew -h3 21891
250
-h3:每隔三行输出一次列表头; 21891:进程号; 250:
interval采样间隔,ms; count不设置,表示打印无数次
S0C
S1C
S0U
S1U TT MTT
DSS
EC
EU
YGC
YGCT
64.0
64.0
0.0
31.7 31
31
32.0
512.0
178.6
249
0.203
64.0
64.0
0.0
31.7 31
31
32.0
512.0
355.5
249
0.203
64.0
64.0
35.4
0.0
2
31
32.0
512.0
21.9
250
0.204
S0C
S1C
S0U
S1U TT MTT
DSS
EC
EU
YGC
YGCT
64.0
64.0
35.4
0.0
2
31
32.0
512.0
245.9
250
0.204
64.0
64.0
35.4
0.0 2
31
32.0
512.0
421.1
250
0.204
64.0
64.0
0.0
19.0 31
31
32.0
512.0
84.4
251
0.204
S0C
S1C
S0U
S1U TT MTT
DSS
EC
EU
YGC
YGCT
64.0
64.0
0.0
19.0 31
31
32.0
512.0
306.7
251
0.204
以上输出表明:
1. S0U: survivor space 0
utilization
DSS: desired survivor Size
TT: tenuring threshold 阀值,
用于控制对象在新生代存活的最大次数
2. 第二行和第三行之间,发生一次新生代gc。
耗时为0.001秒。
本次gc发现较多的存活对象,且S0U超过了DSS,因此,将存活对象提升到老生代(这里没有显示)。并将
TT从31降到2.
3. 另一次gc发生在第5行和第6行,本次gc发现较少的幸存对象,并将阀值变更为31。
四.jstat -gcoldcapacity -t 21891 250
3
-t:在第一列输出时间戳; 21891:进程号; 250: 采样间隔ms;3 采样次Timestamp
OGCMN OGCMX OGC OC YGC
FGC
FGCT
GCT
150.1 1408.0 60544.0
11696.0 11696.0
194
80
2.874 3.799
150.4 1408.0 60544.0 13820.0 13820.0
194
81
2.938 3.863
150.7 1408.0 60544.0 13820.0 13820.0
194
81
2.938 3.863
以上输出表明:
1. OGC: old
generation capacity 老生代空间大小
OGCMN:最小OGC
OGCMX: 最大OGC
OC: old space capacity
FGC: Full GC
OGC: old generation capacity
2. Timestamp从jvm启动的时间开始。
3. 第二行和第三行,经过81次full
gc, OGC从11696
KB 上升到13820
KB 。
4. 老生代最大空间大小OGCMX为 60544 KB,
因此还有上升空间。
五.jstat -class pid
显示加载class的数量,及所占空间等信息。
[root@localhost bin]# jstat -class 25917
Loaded Bytes
Unloaded
Bytes
Time
2629
2916.8
29
24.6
0.90
六.jstat -compiler pid
显示VM实时编译的数量等信息。
[root@localhost bin]# jstat -compiler
25917
Compiled Failed
Invalid
Time FailedType
FailedMethod
768
0
0
0.70
0
七.jstat –gccapacity
可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的
是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
[root@localhost bin]# jstat -gccapacity
25917
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
八.jstat -gcnew pid
new对象的信息
[root@localhost bin]# jstat -gcnew 25917
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
九.jstat -gcnewcapacity
pid: new对象的信息及其占用量
[root@localhost bin]# jstat -gcnewcapacity
25917
NGCMN
NGCMX
NGC S0CMX
S0C S1CMX
S1C
ECMX
EC
YGC FGC
640.0 4992.0 832.0
64.0 448.0
448.0 64.0
4096.0 704.0
168
6
十.jstat -gcold pid: old对象的信息。
[root@localhost bin]# jstat -gcold 25917
PC
PU
OC
OU
YGC
FGC
FGCT
GCT
12800.0
12617.6
9504.0
6561.3
169
6
0.335
0.591
十一.jstat -gcoldcapacity
pid:old对象的信息及其占用量。
[root@localhost bin]# jstat -gcoldcapacity
25917
OGCMN
OGCMX
OGC
OC
YGC
FGC
FGCT
GCT
1408.0
60544.0
9504.0
9504.0
169
6
0.335
0.591
十二.jstat -gcpermcapacity
pid: perm对象的信息及其占用量。
[root@localhost bin]# jstat -gcpermcapacity
25917
PGCMN
PGCMX
PGC
PC
YGC
FGC
FGCT
GCT
8192.0
65536.0
12800.0
12800.0
169
6
0.335
0.591
十三.jstat -printcompilation
pid: 当前VM执行的信息。
[root@localhost bin]# jstat -printcompilation
-h3 25917 1000 5
每1000毫秒打印一次,一共打印5次,还可以加上-h3每三行显示一下标题。
Compiled Size Type
Method
788
73 1
java/io/File
788
73 1
java/io/File
788
73 1
java/io/File
Compiled Size Type
Method
788
73 1
java/io/File
788
73 1
java/io/File
加载中,请稍候......