java应用cpu飙升解决问题思路

1.首先确认占用cpu最高的进程 使用top命令即可查看

top

2. jstat -gcutil 7268 1000 

    jstat:命令,参数 gcutil,7268 进程号 ,1000毫秒输出一次

结果如下图:

java应用cpu飙升解决问题思路

  • 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文件

java应用cpu飙升解决问题思路

打开后的样子

java应用cpu飙升解决问题思路java应用cpu飙升解决问题思路