jvm学习之-jstat

一. 简单说明

jstat是用于监控虚拟机各种运行状态信息的命令工具,尤其对于了解垃圾回收的情况很有帮助(类装载、垃圾收集、运行期编译状况)。

二. 使用方法

1
jstat <option> pid [interval] [count]

下图来自深入理解java虚拟机,这里只选几个重要的进行说明
jstat选项

1
下面以pid=710为例子

1. -gc

1
2
3
4
5
6
7
8
9
10
11
12
$ jstat -gc 710 1000 10
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
0.0 81920.0 0.0 81920.0 3624960.0 761856.0 4681728.0 3069057.4 98304.0 71384.2 25244 478.220 0 0.000 478.220
0.0 81920.0 0.0 81920.0 3624960.0 1966080.0 4681728.0 3069057.4 98304.0 71384.2 25244 478.220 0 0.000 478.220
0.0 81920.0 0.0 81920.0 3624960.0 3104768.0 4681728.0 3069057.4 98304.0 71384.2 25244 478.220 0 0.000 478.220
0.0 77824.0 0.0 77824.0 3633152.0 811008.0 4677632.0 3072193.5 98304.0 71384.2 25245 478.238 0 0.000 478.238
0.0 77824.0 0.0 77824.0 3633152.0 1957888.0 4677632.0 3072193.5 98304.0 71384.2 25245 478.238 0 0.000 478.238
0.0 77824.0 0.0 77824.0 3633152.0 3227648.0 4677632.0 3072193.5 98304.0 71384.2 25245 478.238 0 0.000 478.238
0.0 81920.0 0.0 81920.0 3616768.0 806912.0 4689920.0 3071258.5 98304.0 71384.2 25246 478.256 0 0.000 478.256
0.0 81920.0 0.0 81920.0 3616768.0 2080768.0 4689920.0 3071258.5 98304.0 71384.2 25246 478.256 0 0.000 478.256
0.0 81920.0 0.0 81920.0 3616768.0 3170304.0 4689920.0 3071258.5 98304.0 71384.2 25246 478.256 0 0.000 478.256
0.0 77824.0 0.0 77824.0 3629056.0 815104.0 4681728.0 3074335.5 98304.0 71384.2 25247 478.273 0 0.000 478.273

说明

1
2
3
4
下述容量单位为字节,时间单位为秒
C: capacity
U: used
时间和次数:都是从应用程序启动到采样时算起

选项 说明
列名 描述
S0C survivor-0的总容量
S1C survivor-1的总容量
S0U survivor-0已使用容量
S1U survivor-1已使用容量
EC Eden的总容量
EU Eden已使用容量
OC 老年代的总容量
OU 老年代已使用容量
PC 持久代的总容量
PU 持久代已使用容量
YGC 年轻代中gc(young gc)次数
YGCT 年轻代中gc(young gc)所用时间
FGC 老年代(full gc)gc次数
FGCT 老年代(full gc)gc所用时间
GCT gc(young gc + full gc)用的总时间

2. -gccapacity

例如我们想每秒检测一次java堆各个区域使用到的最小和最大空间,一共检测10次,我们执行如下:

1
2
3
4
5
6
7
8
9
10
11
12
$jstat -gccapacity 710 1000 10
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
0.0 8388608.0 3883008.0 0.0 81920.0 3801088.0 0.0 8388608.0 4505600.0 4505600.0 98304.0 98304.0 98304.0 98304.0 22680 0
0.0 8388608.0 3883008.0 0.0 77824.0 3805184.0 0.0 8388608.0 4505600.0 4505600.0 98304.0 98304.0 98304.0 98304.0 22681 0
0.0 8388608.0 3883008.0 0.0 77824.0 3805184.0 0.0 8388608.0 4505600.0 4505600.0 98304.0 98304.0 98304.0 98304.0 22681 0
0.0 8388608.0 3883008.0 0.0 77824.0 3805184.0 0.0 8388608.0 4505600.0 4505600.0 98304.0 98304.0 98304.0 98304.0 22681 0
0.0 8388608.0 3883008.0 0.0 77824.0 3805184.0 0.0 8388608.0 4505600.0 4505600.0 98304.0 98304.0 98304.0 98304.0 22681 0
0.0 8388608.0 3883008.0 0.0 77824.0 3805184.0 0.0 8388608.0 4505600.0 4505600.0 98304.0 98304.0 98304.0 98304.0 22682 0
0.0 8388608.0 3883008.0 0.0 77824.0 3805184.0 0.0 8388608.0 4505600.0 4505600.0 98304.0 98304.0 98304.0 98304.0 22682 0
0.0 8388608.0 3883008.0 0.0 77824.0 3805184.0 0.0 8388608.0 4505600.0 4505600.0 98304.0 98304.0 98304.0 98304.0 22682 0
0.0 8388608.0 3883008.0 0.0 77824.0 3805184.0 0.0 8388608.0 4505600.0 4505600.0 98304.0 98304.0 98304.0 98304.0 22682 0
0.0 8388608.0 3878912.0 0.0 81920.0 3796992.0 0.0 8388608.0 4509696.0 4509696.0 98304.0 98304.0 98304.0 98304.0 22683 0

选项 说明
列名 描述
NGCMN 年轻代初始化(最小)的容量
NGCMX 年轻代的最大容量
NGC 年轻代中当前的容量
S0C 参考-gc中介绍
S1C 参考-gc中介绍
EC 参考-gc中介绍
OGCMN 老年代中初始化(最小)的容量
OGCMX 老年代的最大容量
OGC 老年代当前新生成的容量
OC 参考-gc中介绍
PGCMN 持久代代中初始化(最小)的容量
PGCMX 持久代的最大容量
PGC 持久代代当前新生成的容量
PC 参考-gc中介绍
YGC 参考-gc中介绍
FGC 参考-gc中介绍

3. -gcutil

例如我们想每秒检测一次java堆各个区域已经使用的百分比,一共检测10次,我们执行如下:

1
2
3
4
5
6
7
8
9
10
11
12
jstat -gcutil 710 1000 10
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 100.00 30.48 64.52 72.61 22651 427.545 0 0.000 427.545
0.00 100.00 55.08 64.52 72.61 22651 427.545 0 0.000 427.545
0.00 100.00 78.61 64.52 72.61 22651 427.545 0 0.000 427.545
0.00 100.00 7.91 64.55 72.61 22652 427.564 0 0.000 427.564
0.00 100.00 33.26 64.55 72.61 22652 427.564 0 0.000 427.564
0.00 100.00 54.97 64.55 72.61 22652 427.564 0 0.000 427.564
0.00 100.00 82.46 64.55 72.61 22652 427.564 0 0.000 427.564
0.00 100.00 12.10 64.56 72.61 22653 427.583 0 0.000 427.583
0.00 100.00 34.37 64.56 72.61 22653 427.583 0 0.000 427.583
0.00 100.00 58.24 64.56 72.61 22653 427.583 0 0.000 427.583

分析第一行

  • 两个survivor:一个使用了100%,一个使用了0%
  • 一个eden:使用了30.48%
  • 老年代:使用了64.52%
  • 持久代:使用了72.61%
  • young gc: 22651次
  • young gc time: 427.545秒
  • full gc: 0次
  • full gc time: 0秒
  • 所有gc time: 427.545秒

三、简单总结

jstat对于分析JVM中垃圾回收的问题有很多帮助,要合理的使用。