jstat可以查看JVM运行的实时监控信息,主要包括堆(新生代、老年代)/方法区的大小、垃圾回收状况、类的加载和卸载、JIT编译等。
语法
jstat -options JVM进程ID
或
jstat -options JVM进程ID interval count
interval : 表示刷新时间间隔,单位ms。
count : 表示一共刷新多少次,达到指定此次后,退出监控。
常用的options参数
class
: 类装载、卸载数量、总空间及类状态消耗的事件
gc
: 监视Java堆的信息,包括Eden、Survivor、老年代、方法区(永久代、元空间)的容量、已使用量、GC时间。
gccapacity
: 监控各个内存区域使用到的最大和最小值。
gcutil
: 监控各个内存区域已使用空间占总空间的百分比。
gccause
: 监控内容与-gcutil
差不多,会输出导致上一次GC产生的原因。
gcnew
: 仅监控年轻代的信息。
gcnewcapacity
: 监控年轻代各区域使用到的最大、最小值。
gcold
: 仅监控老年代的信息。
gcoldcapacity
: 监控老年代使用到的最大值、最小值。
gcpermcapacity
: 监控永久代(JDK1.7及以前版本)使用到的最大值、最小值。gcmetacapacity
: 监控元空间(JDK1.8及以后版本)使用到的最大值、最小值。
compiler
: JIT编译(即时编译)的方法和耗时。
printcompilation
: 打印已经被JIT编译过的方法。
jstat输出的信息含义
jvm的内存空间由S0(Survivor,0号幸存区)+S1(Survivor,1号幸存区)+Eden(伊甸园区)+Tenured(Old老年代)+方法区 组成的。方法区在JDK1.7及以前是Permanent(永久代),在jdk1.8的时候永久代被移除了,变成了Metaspace(元空间)。
列名 | 含义 |
---|---|
S0C | S0的最大内存。C即Capacity,即当前容量的意思。 |
S0U | S0目前已经使用的大小。U即Used,即当前已经使用的意思。 |
EC,EU | E是年轻代中Eden区的意思。EC:当前Eden区的内存大小,EU:已使用大小。 |
OC,OU | 老年代。OC:当前老年代内存大小,OU:老年代已使用的内存大小。 |
PC,PU | 永久代 |
MC,MU | 元空间 |
YGC | 年轻代的GC次数 |
YGCT | 年轻代GC所花费的时间,单位秒 |
FGC | FGC的次数 |
FGCT | FGC所花费的时间,单位秒 |
GCT | YGC+FGC俩个GC加起来所花费的时间,单位秒 |
NGCMN | 新生代最小容量 |
NGCMX | 新生代最大容量 |
NGC | 当前新生代容量 |
OGCMN | 老年代最小容量 |
OGCMX | 老年代最大容量 |
MCMN | 最小元空间容量 |
MCMX | 最大元空间容量 |