jvm

通过jstat查看JVM运行情况

jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

Posted by Ruoli on February 27, 2023

jstat主要用来查看当前java进程的各内存区域的使用情况以及GC的次数和总耗时。命令如下:

1
jstat -gcutil <pid> [interval] [times]

可以用[interval]来控制每隔多少毫秒重复输出一次,并通过[times]参数来控制输出的总次数。这两个参数都是可以省略的,如果都省略的话,就只输出一次。

下面举例说明一下,输出pid=53560的java进程的内存各区域的利用率,每隔1000毫秒输出一次,共输出五次。

1
2
3
4
5
6
7
8
$ jstat -gcutil 53560 1000 5
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00 100.00   4.96   3.23  95.51  93.53      6    0.084     0    0.000    0.084
  0.00 100.00   4.96   3.23  95.51  93.53      6    0.084     0    0.000    0.084
  0.00 100.00   4.96   3.23  95.51  93.53      6    0.084     0    0.000    0.084
  0.00 100.00   4.96   3.23  95.51  93.53      6    0.084     0    0.000    0.084
  0.00 100.00   4.96   3.23  95.51  93.53      6    0.084     0    0.000    0.084

简单解释下其它列的含义

列名 描述
S0 幸存区Survior S0利用率占空间当前容量的百分比
S1 幸存区Survior S1利用率占空间当前容量的百分比
E Eden区利用率占空间当前容量的百分比
O Old老年代利用率占空间当前容量的百分比
M Metaspace元空间利用率占空间当前容量的百分比
CCS 以百分比形式压缩的类空间利用率
YGC 年轻代 GC 事件的数量
YGCT 年轻代垃圾回收时间
FGCT 老年代GC时间
GCT 总垃圾回收时间

如果你想关注各个内存区域的具体大小,而不仅仅是百分比,可以使用jstat -gc,用法相同,例如

1
2
3
4
5
6
7
8
$ jstat -gc 53560 1000 5
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
 0.0   13312.0  0.0   13312.0 1156096.0 57344.0   927744.0   29959.0   62976.0 60147.5 8448.0 7901.7      6    0.084   0      0.000    0.084
 0.0   13312.0  0.0   13312.0 1156096.0 57344.0   927744.0   29959.0   62976.0 60147.5 8448.0 7901.7      6    0.084   0      0.000    0.084
 0.0   13312.0  0.0   13312.0 1156096.0 57344.0   927744.0   29959.0   62976.0 60147.5 8448.0 7901.7      6    0.084   0      0.000    0.084
 0.0   13312.0  0.0   13312.0 1156096.0 57344.0   927744.0   29959.0   62976.0 60147.5 8448.0 7901.7      6    0.084   0      0.000    0.084
 0.0   13312.0  0.0   13312.0 1156096.0 57344.0   927744.0   29959.0   62976.0 60147.5 8448.0 7901.7      6    0.084   0      0.000    0.084

列差不多,只是将百分比一分为二了,C结尾的表示总容量(Capacity),U结尾表示已使用的量(Utilization)。单位是KB。

列名 描述
S0C 幸存区Survior1 S0空间容量 (kb)
S1C 幸存区Survior S1空间容量(kb)
S0U 幸存区Survior1 S0使用空间(kb)
S1U 幸存区Survior S1 使用空间(kb)
EC Eden 区空间容量(kb)
EU Eden 区使用空间(kb)
OC 老年代Old空间容量(kb)
OU 老年代Old(kb)
MC 元空间MetaSpace 空间容量(kb)
MU 元空间MetaSpace使用空间(kb)
CCSC 压缩类空间容量(kb)
CCSU 压缩类使用空间(kb)
YGC 年轻代gc回收数量
YGCT 年轻代gc收集时间
FGC full gc执行数量
FGCT full gc 执行总时间
GCT 总垃圾回收时间