1. 先用jps命令查出java进程号
![](https://pic2.zhimg.com/v2-7133f92398aa2ff406abb1ad2e24eb77_b.jpg)
2. 使用top命令查出该进程使用cpu最高、占用内存最大的线程(嫌疑最大)
这里我们选取微服务项目中的主进程24240
top -Hp 24240 -d 1 -n 1
![](https://pic2.zhimg.com/v2-84024e99095b57fdbfad0e389cbf4fbd_b.jpg)
3. 将该线程号转为16进制(线程号的显示用的是16进制)
24240 = 5EB0
4. 使用jstack命令查询该线程堆栈
jstack -l 24240 | grep 5EB0 -A 20
![](https://pic3.zhimg.com/v2-19e6072ecbd75f6d5ec194777bf8c2b8_b.jpg)
5. 使用jmap显示堆中对象的统计信息
jmap -histo:live 24240 > test.log
less test.log
![](https://picx.zhimg.com/v2-51163a2dd72379a4801840df5e8287db_b.jpg)
通过上述五步,基本能定位一个问题java进程卡在哪行代码,以及是什么类的实例过多(导致内存泄漏)。
标签:java,top,24240,5EB0,排查,线程,进程 From: https://www.cnblogs.com/ZhangZiXue/p/17126304.html