YU000HONG

持续学习,努力向前~

jstat - GC内存回收统计工具

2019-05-28     标签:  JVM

jstat是JDK自带的一个轻量级小工具,全称“Java Virtual Machine statistics monitoring tool”,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。 jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。

名词解释

Minor GC

从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。

YGC

YGC指的是Young Generation GC,年轻代的内存回收,和Minor GC同义。

Major GC

Major GC是指老年代的内存回收。

Full GC

Full GC或者FGC指的是清理整个堆空间,包括年轻代和老年代。

jstat 命令

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

interval & count

interval指定每隔多长时间执行一次,可以使用s/ms作为时间单位。

count指定共执行多少次,如果不提供count,那么将会一直执行下去。

-t

显示时间戳,时间戳会作为第一列进行显示,时间戳是相对于JVM的启动时间计算的,单位秒。

root@host:/data0# jstat -gccause -t 7 1s 5
Timestamp         S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
         2148.4   0.00  98.57  55.06   2.46  95.47  93.37     13    0.202     3    0.432    0.634 Allocation Failure   No GC
         2149.4   0.00  98.57  55.13   2.46  95.47  93.37     13    0.202     3    0.432    0.634 Allocation Failure   No GC
         2150.4   0.00  98.57  55.13   2.46  95.47  93.37     13    0.202     3    0.432    0.634 Allocation Failure   No GC
         2151.4   0.00  98.57  56.28   2.46  95.47  93.37     13    0.202     3    0.432    0.634 Allocation Failure   No GC
         2152.4   0.00  98.57  56.28   2.46  95.47  93.37     13    0.202     3    0.432    0.634 Allocation Failure   No GC

-h lines

每隔lines行就显示表头,默认只会显示一次表头。

root@host:/data0# jstat -gccause -h 3 7 1s 5
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
  0.00  98.57  86.02   2.46  95.47  93.37     13    0.202     3    0.432    0.634 Allocation Failure   No GC
  0.00  98.57  86.02   2.46  95.47  93.37     13    0.202     3    0.432    0.634 Allocation Failure   No GC
  0.00  98.57  86.02   2.46  95.47  93.37     13    0.202     3    0.432    0.634 Allocation Failure   No GC
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
  0.00  98.57  86.02   2.46  95.47  93.37     13    0.202     3    0.432    0.634 Allocation Failure   No GC
  0.00  98.57  86.27   2.46  95.47  93.37     13    0.202     3    0.432    0.634 Allocation Failure   No GC

vmid

vmid可以是本地JVM的进程PID(通过JPS可以获取),也可以是远程主机上的JVM实例。

完整的格式为:[protocol:][//]lvmid[@hostname[:port]/servername]

连接远程JVM时,默认使用的协议为:rmi

option

可用选型如下:

  • class:显示类加载/卸载统计信息
  • compiler:显示JIT即时编译的统计信息
  • gc:GC相关的堆统计信息
  • gccapacity:内存结构中各空间的总容量
  • gcutil:内存回收的统计概要
  • gccause:与gcutil类似,但多了上次触发GC的原因
  • gcnew:新生代统计信息
  • gcnewcapacity:新生代容量信息
  • gcold:老年代及元空间统计信息
  • gcoldcapacity:老年代容量信息
  • gcmetacapacity:元空间容量信息
  • printcompilation

class

显示类加载/卸载统计信息:

  • Loaded:加载的类总数
  • Bytes:加载的总字节数
  • Unloaded:卸载的类总数
  • Bytes:卸载的总字节数
  • Time:加载以及卸载类花费的总时间,单位秒
root@host:/data0# jstat -class 7 1s 5
Loaded  Bytes  Unloaded  Bytes     Time
 14903 28020.2        1     0.9       9.80
 14903 28020.2        1     0.9       9.80
 14903 28020.2        1     0.9       9.80
 14903 28020.2        1     0.9       9.80
 14903 28020.2        1     0.9       9.80

compiler

显示JIT即时编译的统计信息:

  • Compiled:编译任务执行次数
  • Failed:编译任务失败次数
  • Invalid:编译任务失效次数
  • Time:编译任务总的消耗时间
  • FailedType:上次编译失败的编译类型
  • FailedMethod:上次编译失败对应的类及方法
root@host:/data0# jstat -compiler 7 1s 5
Compiled Failed Invalid   Time   FailedType FailedMethod
   11494      2       0    63.94          1 java/net/URLClassLoader$1 run
   11494      2       0    63.94          1 java/net/URLClassLoader$1 run
   11494      2       0    63.94          1 java/net/URLClassLoader$1 run
   11495      2       0    63.95          1 java/net/URLClassLoader$1 run
   11495      2       0    63.95          1 java/net/URLClassLoader$1 run

gc

GC相关的堆统计信息

  • S0C: Survivor 0 总容量,单位KB
  • S1C: Survivor 1 总容量,单位KB
  • S0U: Survivor 0 使用量,单位KB
  • S1U: Survivor 1 使用量,单位KB
  • EC: Eden空间总容量,单位KB
  • EU: Eden空间使用量,单位KB
  • OC: 老年代空间总容量,单位KB
  • OU: 老年代空间使用量,单位KB
  • MC: Metaspace 总容量,单位KB
  • MU: Metacspace 使用量,单位KB
  • CCSC: Compressed class space 总容量,单位KB
  • CCSU: Compressed class space 使用量,单位KB
  • YGC: Minor GC发生次数
  • FGC: Full GC发生次数
  • YGCT: Minor GC总耗时,单位秒
  • FGCT: Full GC总耗时,单位秒
  • GCT: GC总耗时,单位秒
root@host:/data0# jstat -gc 7 1s 5
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
27648.0 27648.0 18684.7  0.0   643584.0 235929.2 1398272.0   34497.0   86912.0 82907.0 10880.0 10089.6     20    0.313   3      0.432    0.745
27648.0 27648.0 18684.7  0.0   643584.0 235929.2 1398272.0   34497.0   86912.0 82907.0 10880.0 10089.6     20    0.313   3      0.432    0.745
27648.0 27648.0 18684.7  0.0   643584.0 235929.2 1398272.0   34497.0   86912.0 82907.0 10880.0 10089.6     20    0.313   3      0.432    0.745
27648.0 27648.0 18684.7  0.0   643584.0 235929.2 1398272.0   34497.0   86912.0 82907.0 10880.0 10089.6     20    0.313   3      0.432    0.745
27648.0 27648.0 18684.7  0.0   643584.0 235929.2 1398272.0   34497.0   86912.0 82907.0 10880.0 10089.6     20    0.313   3      0.432    0.745

gccapacity

内存结构中各空间的总容量(单位KB)

  • NGCMN: 最小新生代容量
  • NGCMX: 最大新生代容量
  • NGC: 新生代当前容量
  • S0C: Survivor 0 总容量
  • S1C: Survivor 1 总容量
  • EC: Eden空间容量
  • OGCMN: 最小老年代容量
  • OGCMX: 最大老年代容量
  • OGC: 老年代当前容量
  • OC: 区别于OGC,具体区别请Google
  • MCMN: 最小元空间容量
  • MCMX: 最大元空间容量
  • MC: 元空间当前容量
  • CCSMN: Compressed class space 最小容量
  • CCSMX: Compressed class space 最大容量
  • CCSC: Compressed class space 当前容量
  • YGC: Minor GC 发生次数
  • FGC: Full GC 发生次数
root@host:/data0# jstat -gccapacity 7 1s 5
 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC
174592.0 174592.0 174592.0 19968.0 19968.0 134656.0   349696.0   349696.0   349696.0   349696.0      0.0 1118208.0  79232.0      0.0 1048576.0  10112.0     35     3
174592.0 174592.0 174592.0 19968.0 19968.0 134656.0   349696.0   349696.0   349696.0   349696.0      0.0 1118208.0  79232.0      0.0 1048576.0  10112.0     35     3
174592.0 174592.0 174592.0 19968.0 19968.0 134656.0   349696.0   349696.0   349696.0   349696.0      0.0 1118208.0  79232.0      0.0 1048576.0  10112.0     35     3
174592.0 174592.0 174592.0 19968.0 19968.0 134656.0   349696.0   349696.0   349696.0   349696.0      0.0 1118208.0  79232.0      0.0 1048576.0  10112.0     35     3
174592.0 174592.0 174592.0 19968.0 19968.0 134656.0   349696.0   349696.0   349696.0   349696.0      0.0 1118208.0  79232.0      0.0 1048576.0  10112.0     35     3

gcutil

内存回收的统计概要:

  • S0/S1/E/O/M:这几个指标指的是各个空间当前使用量与总容量的百分比,即使用率
  • YGC/FGC:各自执行次数
  • YGCT/FGCT/GCT:各自执行总耗时
root@host:/data0# jstat -gcutil 7 1s 5
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
 27.20   0.00   9.68  13.17  95.43  93.08     56    0.500     3    0.448    0.948
 27.20   0.00   9.68  13.17  95.43  93.08     56    0.500     3    0.448    0.948
 27.20   0.00  11.58  13.17  95.43  93.08     56    0.500     3    0.448    0.948
 27.20   0.00  11.58  13.17  95.43  93.08     56    0.500     3    0.448    0.948
 27.20   0.00  11.58  13.17  95.43  93.08     56    0.500     3    0.448    0.948

gccause

与gcutil类似,但多了两列GC触发的原因:

  • LGCC:上次GC触发的原因
  • GCC:本次GC触发的原因
root@host:/data0# jstat -gccause 7 1s 5
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC
  0.00  30.62  65.57  13.18  95.44  93.08     59    0.518     3    0.448    0.966 Allocation Failure   No GC
  0.00  30.62  67.32  13.18  95.44  93.08     59    0.518     3    0.448    0.966 Allocation Failure   No GC
  0.00  30.62  67.58  13.18  95.44  93.08     59    0.518     3    0.448    0.966 Allocation Failure   No GC
  0.00  30.62  67.59  13.18  95.44  93.08     59    0.518     3    0.448    0.966 Allocation Failure   No GC
  0.00  30.62  69.27  13.18  95.44  93.08     59    0.518     3    0.448    0.966 Allocation Failure   No GC

gcnew

新生代统计信息:

  • TT:Tenuring threshold,经历多少次Minor GC才晋升到老年代
  • MTT:Maximum tenuring threshold
  • DSS:Desired survivor size (kB)
root@host:/data0# jstat -gcnew 7 1s 5
 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
10752.0 10240.0 3435.2    0.0 15  15 10240.0 153600.0  29870.8     60    0.524
10752.0 10240.0 3435.2    0.0 15  15 10240.0 153600.0  30275.9     60    0.524
10752.0 10240.0 3435.2    0.0 15  15 10240.0 153600.0  30275.9     60    0.524
10752.0 10240.0 3435.2    0.0 15  15 10240.0 153600.0  30558.3     60    0.524
10752.0 10240.0 3435.2    0.0 15  15 10240.0 153600.0  33453.5     60    0.524

gcnewcapacity

新生代容量信息

root@host:/data0# jstat -gcnewcapacity 7 1s 5
  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC
  174592.0   174592.0   174592.0  57856.0   6656.0  57856.0   6144.0   173568.0   161792.0    76     3
  174592.0   174592.0   174592.0  57856.0   6656.0  57856.0   6144.0   173568.0   161792.0    76     3
  174592.0   174592.0   174592.0  57856.0   6656.0  57856.0   6144.0   173568.0   161792.0    76     3
  174592.0   174592.0   174592.0  57856.0   6656.0  57856.0   6144.0   173568.0   161792.0    76     3
  174592.0   174592.0   174592.0  57856.0   6656.0  57856.0   6144.0   173568.0   161792.0    76     3

gcold

老年代及元空间统计信息

root@host:/data0# jstat -gcold 7 1s 5
   MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT
 86016.0  81990.3  10752.0  10019.8    349696.0     48877.6     77     3    0.448    1.054
 86016.0  81990.3  10752.0  10019.8    349696.0     48877.6     77     3    0.448    1.054
 86016.0  81990.3  10752.0  10019.8    349696.0     48877.6     77     3    0.448    1.054
 86016.0  81990.3  10752.0  10019.8    349696.0     48877.6     77     3    0.448    1.054
 86016.0  81990.3  10752.0  10019.8    349696.0     48877.6     77     3    0.448    1.054

gcoldcapacity

老年代容量信息

root@host:/data0# jstat -gcoldcapacity 7 1s 5
   OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT
   349696.0    349696.0    349696.0    349696.0    77     3    0.448    1.054
   349696.0    349696.0    349696.0    349696.0    77     3    0.448    1.054
   349696.0    349696.0    349696.0    349696.0    77     3    0.448    1.054
   349696.0    349696.0    349696.0    349696.0    77     3    0.448    1.054
   349696.0    349696.0    349696.0    349696.0    77     3    0.448    1.054

gcmetacapacity

元空间容量信息

root@host:/data0# jstat -gcmetacapacity 7 1s 5
   MCMN       MCMX        MC       CCSMN      CCSMX       CCSC     YGC   FGC    FGCT     GCT
       0.0  1124352.0    86016.0        0.0  1048576.0    10752.0    75     3    0.448    1.045
       0.0  1124352.0    86016.0        0.0  1048576.0    10752.0    75     3    0.448    1.045
       0.0  1124352.0    86016.0        0.0  1048576.0    10752.0    75     3    0.448    1.045
       0.0  1124352.0    86016.0        0.0  1048576.0    10752.0    75     3    0.448    1.045
       0.0  1124352.0    86016.0        0.0  1048576.0    10752.0    75     3    0.448    1.045

printcompilation

TODO

jstat - Monitors Java Virtual Machine (JVM) statistics