cpu 100%排查

2,235 阅读1分钟
  1. top

查看高cpu进程pid=1234

  1. top -H -p 1234

查找进程内cpu占用较高的线程pid,并转成十六进制ea88

  1. jstack 1234

查看线程栈信息,并找到ea88对应的线程,发现其是VM Thread,判断是jvm gc线程

  1. jstat -gcutil 1234 1s 10

查看gc情况,发现几乎每秒一次full gc

  1. jmap -heap 1234

查看jvm的堆栈使用情况,发现新生代和老年代空间充足

  1. jstat -gc 1234 1s 3

查看gc的各分区内存占用情况,发现matespace使用100%

  1. 查看gc日志

提前配置jvm gc日志输出 -XX:+PrintGCDetails -XX:+PrintGC;确定是由于matespace空间不足导致频繁full gc


分析堆栈信息

  1. jmap -histo 1234

查看实例信息

  1. jmap -dump:live,format=b,file=heap.bin 1234

导出堆内存信息,可使用mat分析