本篇记录本人在学习JDK监控工具的一些笔记。JDK是1.8
JPS:查看java的进程命令
左边的数字是进程ID,对应的是进程的名称。
jstat:查看运行时状态信息。
1、-class:监控类装载,卸载数量,总空间以及消费的时间
jstat -class + 进程ID
Loaded:加载class的数量
Bytes:class字节大小
Unloaded:未加载数量
Bytes:未加载Class的字节大小
Time:加载时间
2、-gc:垃圾回收堆的行为统计(常用命令)
jstat -gc +进程ID [多少毫秒打印一次] [一共打印多少次]
SOC
survivor0总容量
S1C
survivor1总容量
S0U
survivor0已经使用的容量
S1U
survivor1已经使用的容量
EC
Eden区总容量
EU
Eden区已经使用的容量
OC
老年区总容量
OU
老年区已经使用的容量
MC
方法区的总容量
MU
方法区已经使用的容量
CCSC
压缩类空间大小
CCSU
压缩类空间使用的大小
YGC
年轻代垃圾回收次数
YGCT
年轻代垃圾回收的时间
FGC
老年代垃圾回收的次数
FGCT
老年代垃圾回收的时间
GCT
垃圾回收总消耗时间
由图可得,MajorGC执行了4次,FullGC执行了一次,STW 0.002s,总消耗的时间为0.016s.
总GC消耗的时间(GCT) = YGC + FGCT
通常,64位JVM消耗的内存会比32位的大1.5倍。因为在64位JVM下,长度会翻倍。
3、-gccapacity:同-gc,同时还会输出JAVA堆各区域的使用到的最大、最小空间
jstat -gccapacity +进程ID
NGCMN:新生代占用的最小空间 OGCMN:老年代占用的最小空间 MC:当前元数据的空间大小
NGCMX:新生代占用的最大空间 OGCMX:老年代占用的最大空间 CCSMN:最小压缩类空间大小
NGC:当前新生代的空间 OGC:老年代已用的空间 CCSMX:最大压缩类空间大小
SOC:survivor0的空间总量 OC:当前老年的容量(KB) CCSC:当前压缩类空间大小
S1C:survivor1的空间总量 MCMN:最小元数据容量 YGC:yongGC(Major GC)回收次数
EC:Eden区 的总容量 MCMX:最大元数据容量 FGC:Full GC回收次数
4、-gcutil:同-gc,输出的是已使用空间占总空间的百分比
SO:survivor0区当前的使用比例 O:老年代使用的比例 YGC:年轻代垃圾回收次数 FGCT:老年代垃圾回收时间
S1:survivor1区当前使用的比例 M:元数据区使用的比例 YGCT:年轻代垃圾回收的耗时 GCT:垃圾回收的总耗时
E:Eden区当前使用的比例 CSS:压缩使用比例 FGC:老年代垃圾回收次数
5、-gccause:在-gcutil的基础上附加最近两次垃圾回收时间的原因
LGCC:最近垃圾回收的原因 GCC:当前垃圾回收的原因 AllocationFailure:内存分配失败
两个可视化工具:jconsole jvisualvm