1. ⾸先top命令查看服务器cpu等情况
命令:top
发现线上PID 29737 的 java应⽤cpu达到100%

2. top -H -p pid命令查看具体的线程情况
命令:top -H -p 29373
输入上述命令,然后按H显示cpu最高排名的线程。可以看到pid 30013的线程cpu 100%且一直未释放。

3.将线程的pid转为16进制
命令:printf "%x\n" 30013

4.使用jvm工具jstack打印该线程堆栈信息
使用该命令打印堆栈信息的后200行
命令:jstack 29737 |grep -A 200 753d > stack.txt
29737是进程PID
753d是线程PID的16进制
5.使用jvm工具jmap打印该进程的堆内存信息
查询进程的内存(查看堆中对象的信息)
命令: jmap -histo:live 6 > neicun.txt
6是进程PID
执行前面5个步骤后,将stack.txt和neicun.txt文件发给研发分析gc监控报告
6.jmap分析内存溢出/泄漏【根据实际情况决定是否执行】
该命令执行时,对机器的内存要求较高,需要检查机器上是否有足够的内存
命令:jmap -dump:live,format=b,file=文件路径/文件名 pid
• live:就是只dump 活着的对象
• format=b 使用二进制
• file= 快照文件保存路径