[超级链接:JVM性能调优工具学习记录-序章]
本章主要学习JVM统计监测工具jstat。
1.用途
对JVM进行统计监测,统计项主要包括:类加载情况、内存容量及用量、GC次数及时间等。
2.语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 1Usage: jstat -help|-options
2 jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
3
4Definitions:
5 <option> An option reported by the -options option
6 <vmid> Virtual Machine Identifier. A vmid takes the following form:
7 <lvmid>[@<hostname>[:<port>]]
8 Where <lvmid> is the local vm identifier for the target
9 Java virtual machine, typically a process id; <hostname> is
10 the name of the host running the target Java virtual machine;
11 and <port> is the port number for the rmiregistry on the
12 target host. See the jvmstat documentation for a more complete
13 description of the Virtual Machine Identifier.
14 <lines> Number of samples between header lines.
15 <interval> Sampling interval. The following forms are allowed:
16 <n>["ms"|"s"]
17 Where <n> is an integer and the suffix specifies the units as
18 milliseconds("ms") or seconds("s"). The default units are "ms".
19 <count> Number of samples to take before terminating.
20 -J<flag> Pass <flag> directly to the runtime system.
21
2.1.参数说明
- -options:检测内容,如class、compiler、gc等等。
- -t:在第一列打印时间戳。
- -h<lines>:每隔多少行打印一次表头。
- vmid:JVM的进程id。
- interval:多次时间打印一次。
- count:打印多少次。
- -J<flag>:直接手动设置JVM参数。
2.2.完整示例
为了直观理解各参数,下面给出一个参数齐全的示例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1C:\Users\hanchao>jstat -class -t -h5 7484 1000 10
2Timestamp Loaded Bytes Unloaded Bytes Time
3 4287.4 880 1717.9 0 0.0 0.36
4 4288.4 880 1717.9 0 0.0 0.36
5 4289.4 880 1717.9 0 0.0 0.36
6 4290.4 880 1717.9 0 0.0 0.36
7 4291.4 880 1717.9 0 0.0 0.36
8Timestamp Loaded Bytes Unloaded Bytes Time
9 4292.4 880 1717.9 0 0.0 0.36
10 4293.4 880 1717.9 0 0.0 0.36
11 4294.4 880 1717.9 0 0.0 0.36
12 4295.4 880 1717.9 0 0.0 0.36
13 4296.5 880 1717.9 0 0.0 0.36
14
示例说明:
- jstat -class:打印类加载和卸载的统计信息。
- -t:第一列打印时间戳。
- -h5:每5行打印一次表头。
- 7484:目标进程id。
- 1000:每1000毫秒打印一次。
- 10:共打印10次。
2.3.Option说明
-
class:类加载情况。包括:加载类的数量及大小、卸载类的数量及大小以及类加载卸载耗时。
1
2
3
4 1C:\Users\hanchao>jstat -class 10068
2Loaded Bytes Unloaded Bytes Time
31956 3530.4 0 0.0 0.77
4
-
compiler:即时编译器编译情况。包括:编译次数、失败次数、不合法次数、最后编译失败的类型、最后编译失败的类名和方法名。
1
2
3
4 1C:\Users\hanchao>jstat -compiler 10068
2Compiled Failed Invalid Time FailedType FailedMethod
32005 0 0 7.04 0
4
-
gc:GC情况。包括(单位kb):
-
S0C/S1C/S0U/S1U:S0容量/S1容量/S0用量/S1用量
-
EC/EU/OC/OU:Eden容量/Eden用量/Old容量/Old用量
-
MC/MU/CCSC/CCSU:元空间容量/元空间用量/压缩类空间容量/压缩类空间用量
-
YGC/YGCT/FGC/FGCT/GCT:YoungGC次数/YoungGC耗时/FullGC次数/FullGC耗时/GC总耗时
-
1
2
3
4 1C:\Users\hanchao>jstat -gc 10068
2S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
32048.0 2048.0 0.0 160.0 24064.0 15041.9 36352.0 3609.6 12032.0 11094.6 1536.0 1265.6 33 0.107 3 0.051 0.158
4
-
gccapacity:内存容量情况。包括(单位kb):
-
NGCMN/NGCMX/NGC:新生代容量最小值/新生代容量最大值/新生代容量
-
S0C/S1C/EC:Survivor0容量/Survivor1容量/Eden区容量
-
OGCMN/OGCMX/OGC/OC:老年代容量最小值/老年代容量最大值/老年代容量/老年代容量
-
MCMN/MCMX/MC:元空间容量最小值/元空间容量最大值/元空间容量
-
CCSMN/CCSMX/CCSC:类压缩空间容量最小值/类压缩空间容量最大值/类压缩空间容量
-
YGC/FGC:Young GC次数/Full GC次数。
-
1
2
3
4 1C:\Users\hanchao>jstat -gccapacity 10068
2NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
343520.0 692224.0 27136.0 1536.0 512.0 24064.0 87552.0 1384448.0 36352.0 36352.0 0.0 1060864.0 12032.0 0.0 1048576.0 1536.0 35 3
4
-
gcutil:整体GC情况。
-
S0/S1/E/O:S0用量百分比/S1用量百分比/新生代用量百分比/老年代用量百分比
-
M/CCS:元空间用量百分比/类压缩用量百分比
-
YGC/YGCT/FGC/FGCT/GCT:YoungGC次数/YoungGC耗时/FullGC次数/FullGC耗时/GC总耗时
-
1
2
3
4 1C:\Users\hanchao>jstat -gcutil 10068
2S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
312.50 0.00 35.63 10.33 92.22 82.43 40 0.122 3 0.051 0.173
4
-
gccause:与gcutil类似,多了以下两个参数
-
LGCC:最后一次GC产生的原因。
-
GCC:当前正在发生的GC产生的原因。
-
1
2
3
4 1C:\Users\hanchao>jstat -gccause 10068
2S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
312.50 0.00 17.89 10.33 92.22 82.43 40 0.122 3 0.051 0.173 Allocation Failure No GC
4
-
gcnew:新生代GC情况。
-
TT:Tenuring Threshold,即年老代阈值,新生代经历多少次复制后进入年老代。
-
MTT:最大的TT。
-
DSS:期望存活大小。
-
1
2
3
4 1C:\Users\hanchao>jstat -gcnew 10068
2S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
31536.0 1536.0 0.0 192.0 15 15 1536.0 24064.0 1931.1 41 0.123
4
-
gcnewcapacity:新生代容量情况。
1
2
3
4 1C:\Users\hanchao>jstat -gcnewcapacity 10068
2NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
343520.0 692224.0 27136.0 230400.0 1536.0 230400.0 1536.0 691200.0 24064.0 41 3
4
-
gcold:老年代GC情况。
1
2
3
4 1C:\Users\hanchao>jstat -gcold 10068
2MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
312032.0 11101.2 1536.0 1266.1 36352.0 3769.6 41 3 0.051 0.174
4
-
gcoldcapacity:老年代容量情况。
1
2
3
4 1C:\Users\hanchao>jstat -gcoldcapacity 10068
2OGCMN OGCMX OGC OC YGC FGC FGCT GCT
387552.0 1384448.0 36352.0 36352.0 41 3 0.051 0.174
4
-
gcmetacapacity:元空间和类压缩空间的容量和GC情况。
-
MCMN/MCMX/MC:元空间容量最小值/元空间容量最大值/元空间容量
-
CCSMN/CCSMX/CCSC:压缩类空间容量最小值/压缩类空间容量最大值/压缩类空间容量
-
1
2
3
4 1C:\Users\hanchao>jstat -gcmetacapacity 10068
2MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
30.0 1060864.0 12032.0 0.0 1048576.0 1536.0 41 3 0.051 0.174
4
-
printcompilation:HotSpot编译方法的统计。包括:编译次数、字节码大小、编译类型和编译类名和方法名。
1
2
3
4 1C:\Users\hanchao>jstat -printcompilation 10068
2Compiled Size Type Method
32040 351 1 sun/security/action/GetPropertyAction run
4
3.常用命令示例
以1000毫秒为间隔,打印5此GC统计信息。
1
2
3
4
5
6
7
8 1C:\Users\hanchao>jstat -gcutil 7484 1000 5
2 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
3 0.00 0.00 44.81 0.00 17.20 19.76 0 0.000 0 0.000 0.000
4 0.00 0.00 44.81 0.00 17.20 19.76 0 0.000 0 0.000 0.000
5 0.00 0.00 44.81 0.00 17.20 19.76 0 0.000 0 0.000 0.000
6 0.00 0.00 44.81 0.00 17.20 19.76 0 0.000 0 0.000 0.000
7 0.00 0.00 44.81 0.00 17.20 19.76 0 0.000 0 0.000 0.000
8
以1000毫秒为间隔,打印5此GC统计信息及GC原因。
1
2
3
4
5
6
7
8 1C:\Users\hanchao>jstat -gccause 7484 1000 5
2 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
3 0.00 0.00 44.81 0.00 17.20 19.76 0 0.000 0 0.000 0.000 No GC No GC
4 0.00 0.00 44.81 0.00 17.20 19.76 0 0.000 0 0.000 0.000 No GC No GC
5 0.00 0.00 44.81 0.00 17.20 19.76 0 0.000 0 0.000 0.000 No GC No GC
6 0.00 0.00 44.81 0.00 17.20 19.76 0 0.000 0 0.000 0.000 No GC No GC
7 0.00 0.00 44.81 0.00 17.20 19.76 0 0.000 0 0.000 0.000 No GC No GC
8