jvm gc监控分析常用命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm gc监控分析常用命令相关的知识,希望对你有一定的参考价值。
1、 jstat -gcutil pid统计gc信息统计。
[[email protected] jvm-monitor]# jstat -gcutil 8733
S0 S1 E O P YGC YGCT FGC FGCT GCT
82.43 0.00 75.67 97.91 99.57 23066 152.726 77 96.956 249.681
2、 jstat -gc pid
可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
[[email protected] jvm-monitor]# jstat -gc 8733
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
2432.0 2432.0 0.0 1616.0 169856.0 127544.6 488384.0 478753.1 126336.0 125788.6 23069 152.747 77 96.956 249.703
3、 jstat -gccapacity pid
可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。
其他的可以根据这个类推, OC是old内纯的占用量。
[[email protected] jvm-monitor]# jstat -gccapacity 8733
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
174720.0 1048576.0 174720.0 2368.0 2368.0 169984.0 349568.0 2097152.0 488384.0 488384.0 21248.0 1048576.0 126336.0 126336.0 23045 77
4、jstat -gcnew pid
年轻代对象的信息。
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
2240.0 2240.0 0.0 1568.0 14 15 2240.0 170176.0 89972.2 23083 152.845
5、jstat -gcnewcapacity pid
年轻代对象的信息及其占用量。
[[email protected] jvm-monitor]# jstat -gcnewcapacity 8733
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
174720.0 1048576.0 174720.0 1984.0 349504.0 349504.0 2176.0 1048448.0 170368.0 23102 77
6、jstat -gcold pid
old代对象的信息。
[[email protected] jvm-monitor]# jstat -gcold 8733
PC PU OC OU YGC FGC FGCT GCT
126336.0 125788.6 488384.0 482489.2 23105 77 96.956 249.961
7、jstat -gcoldcapacity pid
old代对象的信息及其占用量。
[[email protected] jvm-monitor]# jstat -gcoldcapacity 8733
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
349568.0 2097152.0 488384.0 488384.0 23109 77 96.956 249.988
8、jstat -gcpermcapacity pid
perm对象的信息及其占用量。
[[email protected] jvm-monitor]# jstat -gcpermcapacity 8733
PGCMN PGCMX PGC PC YGC FGC FGCT GCT
21248.0 1048576.0 126336.0 126336.0 23112 77 96.956 250.012
9、jstat -class pid
显示加载class的数量,及所占空间等信息。
[[email protected] jvm-monitor]# jstat -class 8733
Loaded Bytes Unloaded Bytes Time
16772 34185.4 106 173.5 53.06
10、jstat -compiler pid
显示VM实时编译的数量等信息。
[[email protected] jvm-monitor]# jstat -compiler 8733
Compiled Failed Invalid Time FailedType FailedMethod
20734 2 0 167.48 1 com/mysql/jdbc/NonRegisteringDriver parseURL
11、jstat -printcompilation pid
当前VM执行的信息。
[[email protected] jvm-monitor]# jstat -printcompilation 8733
Compiled Size Type Method
20734 194 1 com/mysql/jdbc/SQLError get
12,jmap -heap 8733
查看JVM中各个代的内存状况
13,jmap -histo:live 8733
程序中当前的对象按照个数和占用的空间排序以后打印出来
结论
1、在CMS-remark阶段需要对堆中所有的内存对象进行处理,如果在这个阶段之前强制执行一次年轻代的GC会大量减少remark需要处理的内存数量,进而降低JVM卡顿对成功率的影响。
2、对于Java HTTP服务,JVM的卡顿时间应该小于HTTP客户端的调用超时时间,否则JVM卡顿会对成功率造成影响。
以上是关于jvm gc监控分析常用命令的主要内容,如果未能解决你的问题,请参考以下文章
Java 虚拟机原理垃圾回收算法 ( 设置 JVM 命令参数输出 GC 日志 | GC 日志输出示例 | GC 日志分析 )