HeavenTang

导航

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编辑  收藏  举报