1.首先确认占用cpu最高的进程 使用top命令即可查看
top
2. jstat -gcutil 7268 1000
jstat:命令,参数 gcutil,7268 进程号 ,1000毫秒输出一次
结果如下图:
- S0:幸存1区当前使用比例
- S1:幸存2区当前使用比例
- E:年轻代区使用比例
- O:老年代使用比例
- M:元数据区使用比例
- CCS:压缩使用比例
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
主要关注的点是年轻态和老年态的占用比例,还有gc次数。往往cpu飙升是因为年轻代爆满,导致老年代爆满,gc回收不了。
不过这些都只是表相,最根本的原因还需要将dump文件打印出来
jmap -dump:format=b,file=/Users/icourt/Downloads/dump.hprof 7268
使用mat分析dump文件
打开后的样子