用于监控堆的使用情况,可以做如下监控:
1 类的加载及卸载情况。
2 查看新生代、老生代及持久代的容量及使用情况。
3 查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间。
4 查看新生代中Eden区l及Survior区中容量及分配情况等。
该工具特别强大,它有众多的可选项,通过提供多种不同的监控维度,详细查看堆内各个部分的使用量。
使用时必须加上待监控的Java进程号,可选的不同维度参数以及可选的统计频率参数。
命令格式:
jstat [option vmid [interval[s|ms] [count]]]
其中:
vmid 当前运行的java进程号。
interval 打印间隔时间,通过s和ms确定,默认是毫秒。
count 打印次数。
根据统计的维度不同,可以使用不同的选项进行不同维度的统计,不同的操作系统支持的选项可能会不一样,可以通过-options选项,查看不同操作系统所支持选项:
$ jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcpermcapacity
-gcutil
-printcompilation
说明: -class 用于查看类加载情况的统计。 -compiler 用于查看虚拟机中即时编译器编译情况的统计。 -gc 用于查看JVM中堆的垃圾收集情况的统计。 -gccapacity 用于查看新生代、老生代及持久代的存储容量情况。 -gccause 用于查看垃圾收集的统计情况(这个和-gcutil选项一样), 如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因。 -gcnew 用于查看新生代垃圾收集的情况。 -gcnewcapacity 用于查看新生代的存储容量情况。 -gcold 用于查看老生代及持久代发生GC的情况。 -gcoldcapacity 用于查看老生代的容量。 -gcpermcapacity 用于查看持久代的容量。 -gcutil 用于查看新生代、老生代及持久代垃圾收集的情况。 -printcompilation 虚拟机编译方法的统计。
$ jstat -gc 21645 1s 3 S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT 1024.0 1024.0 0.0 0.0 8192.0 6471.9 10240.0 4096.0 21504.0 2381.2 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 6471.9 10240.0 4096.0 21504.0 2381.2 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 6471.9 10240.0 4096.0 21504.0 2381.2 0 0.000 0 0.000 0.000 其中: S0C 新生代中Survivor space中S0当前容量的大小(KB) S1C 新生代中Survivor space中S1当前容量的大小(KB) S0U 新生代中Survivor space中S0容量使用的大小(KB) S1U 新生代中Survivor space中S1容量使用的大小(KB) EC Eden space当前容量的大小(KB) EU Eden space容量使用的大小(KB) OC Old space当前容量的大小(KB) OU Old space使用容量的大小(KB) PC Permanent space当前容量的大小(KB) PU Permanent space使用容量的大小(KB) YGC 从应用程序启动到采样时发生 Young GC 的次数 YGCT 从应用程序启动到采样时 Young GC 所用的时间(秒) FGC 从应用程序启动到采样时发生 Full GC 的次数 FGCT 从应用程序启动到采样时 Full GC 所用的时间(秒) GCT 从应用程序启动到采样时用于垃圾回收的总时间(秒),它的值等于YGCT+FGCT
$ jstat -gcutil 21645 S0 S1 E O P YGC YGCT FGC FGCT GCT 0.00 0.00 79.00 40.00 11.07 0 0.000 0 0.000 0.000 其中: S0 Heap上的 Survivor space 0 区已使用空间的百分比 S1 Heap上的 Survivor space 1 区已使用空间的百分比 E Heap上的 Eden space 区已使用空间的百分比 O Heap上的 Old space 区已使用空间的百分比 P Perm space 区已使用空间的百分比 YGC 从应用程序启动到采样时发生 Young GC 的次数 YGCT 从应用程序启动到采样时 Young GC 所用的时间(秒) FGC 从应用程序启动到采样时发生 Full GC 的次数 FGCT 从应用程序启动到采样时 Full GC 所用的时间(秒) GCT 从应用程序启动到采样时用于垃圾回收的总时间(秒),它的值等于YGCT+FGCT
使用VisualVM等可视化工具能以图表的形式直观展示堆的使用情况,但控制台中的jstat依然是一种常用的监控方式。