JVM内存溢出CPU飙升排查方法

一、内存不足

查看linux内存使用情况

free -m

查看java 进程/线程对系统的占用情况 

top 

看堆内存信息

jmap -heap pid

JVM内存溢出CPU飙升排查方法_第1张图片

导出dump java堆数据

jmap -dump:live,format=b,file=/dump_.dat pid

打开jvisualVM-》文件-》装入-》堆dump

JVM内存溢出CPU飙升排查方法_第2张图片

二、cpu飙升

top命令查看cpu,内存情况

top

 JVM内存溢出CPU飙升排查方法_第3张图片

找到占用cpu高的pid

top -Hp pid

 打印出线程信息

jstack -l pid

假如我们上面 top -Hp 命令找到的占用cpu高的pid是24190

先转成16进制

然后

printf "%x\n" pid

jstack -l javapid | grep '0x+十六进制pid' -A10 --color -A是打印符合条件后n行,-C是环绕n行,-B是之前n行

JVM内存溢出CPU飙升排查方法_第4张图片

根据堆栈信息和线程状态,分析cpu占用原因。
如果线程状态是BLOCKED,就是线程阻塞中 

你可能感兴趣的:(Java)