jstat是jdk自带的JVM内存统计工具,用于查看heap的内存和垃圾回收情况。
用法:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数定义:
- options:选项,通过
jstat -options查看支持的选项,目前支持- -class
- -compiler
- -gc
- -gccapacity
- -gccause
- -gcmetacapacity
- -gcnew
- -gcnewcapacity
- -gcold
- -gcoldcapacity
- -gcutil
- -printcompilation
- lines: 使用interval参数,会在间隔指定时间后输出当前JVM内存的状态,这个参数是指定输出多少行后,再输出title,这样就不需要翻屏看这一列的title了。
- vmid: 虚拟机的pid
- interval:间隔多少时间后循环输出,不指定的话,就输出一次
- count:指定输出多少次
实例:
class
jstat -class pid
输出如下:
显示的是加载的类的数量和占用的字节数、卸载的类的数量和字节数,以及加载卸载所花时间。
compiler
jstat -compiler pid

- Compiled: 编译的数量
- Failed: 编译失败的数量
- Invalid: 编译失效的数量
- Time: 编译任务消耗时间
- FailedType: 最后一次编译失败类型
- FailedMethod:最后一次编译失败的类和方法
complier展示的是编译的统计
gc
jstat -gc

- S0C 年轻代第一个survivor区的容量
- S1C 年轻代第二个survivor区的容量
- S0U 年轻代第一个survivor区的已用空间(字节)
- S1U 年轻代第一个survivor区的已用空间(字节)
- EC 年轻代eden区的容量
- EU 年轻代eden区的已用空间
- OC 老年代的容量
- OU 老年代的已用空间
- MC 元空间(Metaspace)的容量
- MU 元空间的已用空间
- CCSC 压缩的类空间容量
- CCSU 压缩的类空间已用空间
- YGC 年轻代垃圾回收事件的数量
- YGCT 年轻代垃圾回收时间
- FGC Full GC事件数量
- FGCT Full GC时间
- GCT GC总时间
gc展示的是垃圾回收的统计,这个例子基于java 8,java 8之前是没有元空间(MetaSpace)概念的,而是永久代(PC,PU)
gccapacity
jstat -gccapacity pid

- NGCMN 年轻代最小(初始化)大小
- NGCMX 年轻代最大容量
- NGC 年轻代当前大小
- S0C 年轻代第一个survivor区容量
- S1C 年轻代第二个survivor区容量
- EC 年轻代Eden区容量
- OGCMN 老年代初始化容量
- OGCMX 老年代最大容量
- OGC 老年代当前占用容量
- OC 老年代空间容量
- MCMN 元空间初始容量
- MCMX 元空间最大容量
- CCSMN 压缩类空间初始容量
- CCSMX 压缩类空间最大容量
- CCSC 当前压缩类空间容量
- YGC 年轻代垃圾回收事件数量
- FGC Full GC事件数量
gccapacity展示的是各个空间的初始容量、最大容量、以及当前容量
gcnew

- S0C 年轻代第一个survivor区容量
- S1C 年轻代第二个survivor区容量
- S0U 年轻代第一个survivor区已用空间
- S1U 年轻代第二个survivor区已用空间
- TT 持有次数限制
- MTT 最大持有次数限制(超过这个值放入old)
- EC 年轻代的容量
- EU 年轻代的已用空间
- YGC 年轻代GC事件次数
- YGCT 年轻代GC消耗的时间
gcnew展示的年轻代的信息
后面的-gcnewcapacity -gcold -gcoldcapacity -gcutil字段都类似,不再演示。-printcompilation展示的是编译相关的信息。