1 top 查找进程号
2 top -H -p 739 获取进程中cpu占用过高的线程,按cpu占用倒序排列
3 printf %#x 747 将第二步骤占用cpu高的线程号拿过来,转换为16进制0x2eb
5 jstack 739 | grep 0x2eb -A 20
如果是自己代码问题的话排查代码问题,20表示显示的行数。
如果是GC线程的话可以看gc日志
jstat -gcutil 739 1000 20
转储堆快照(流量切掉): jmap -dump:live,format=b,file=/home/work/739.dump 739
压缩:tar -zcf 739.dump.tar.gz 739.dump
下载下来通过MAT(Eclipse Memory Analyse)进行分析
打开后如下图:
通过Leak Suspects进行内存泄漏分析:
根据detail的结果进行分析,直至定位到问题