Java进程假死排查 《二》
在使用docker部署的项目可以参考 第一篇文章:
https://www.cnblogs.com/heavenTang/p/18027006
如果是非docker部署的,那么往下看:
步骤1. top
输入 top 命令,找到占用 CPU 最高的进程。按 Shift+P 键排序:
可以看到 CPU 占用最高的 pid 是 92129 。
步骤2. top -Hp pid
查看指定进程内线程信息,其中 pid 是第一步的 pid 。
top -Hp 92129
找到占用最高的线程 pid 为 92156 ,然后转成 十六进 ,使用公式转换:
printf'%x'92156
输出结果是: 167fc
步骤3. jstack 命令
使用 jstack 命令分析进程状态,为了方便查询,将分析结果输入到一个文件中, jstack pid > x.txt 其中 pid 是步骤1的进程号。
jstack 92129 > x.txt
打开 x.txt 文件,在文件中查询 步骤2 转换的十六进制数:
找到非 Jdk 代码,也是自己写的代码,就能找到问题的根源了。
总结
top 找到进程号
top -Hp 进程号,找到线程号,线程转成十六进制。
jstack pid 分析。根据十六进制查询,找到问题代码位置。
问题: 使用jstack 可能会报错如下:
这种情况有2种:
posted on 2024-03-27 17:47 HeavenTang 阅读(113) 评论(0) 编辑 收藏 举报