JVM性能调优工具02-jstat-JVM统计监测工具

[超级链接:JVM性能调优工具学习记录-序章]


本章主要学习JVM统计监测工具jstat。

1.用途

对JVM进行统计监测,统计项主要包括:类加载情况、内存容量及用量、GC次数及时间等。

2.语法

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.完整示例

为了直观理解各参数,下面给出一个参数齐全的示例。

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:类加载情况。包括:加载类的数量及大小、卸载类的数量及大小以及类加载卸载耗时。

1C:\Users\hanchao>jstat -class 10068 2Loaded Bytes Unloaded Bytes Time 31956 3530.4 0 0.0 0.77 4
  • compiler:即时编译器编译情况。包括:编译次数、失败次数、不合法次数、最后编译失败的类型、最后编译失败的类名和方法名。

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总耗时

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次数。

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总耗时

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产生的原因。

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:期望存活大小。

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:新生代容量情况。

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情况。

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:老年代容量情况。

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:压缩类空间容量最小值/压缩类空间容量最大值/压缩类空间容量

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编译方法的统计。包括:编译次数、字节码大小、编译类型和编译类名和方法名。

1C:\Users\hanchao>jstat -printcompilation 10068 2Compiled Size Type Method 32040 351 1 sun/security/action/GetPropertyAction run 4

3.常用命令示例

以1000毫秒为间隔,打印5此GC统计信息。

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原因。

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

代码交流 2021