-
ssh ip 连接上远程服务器
-
top 查看占比较高的java进程号 如12816
-
top -Hp pid可以查看某个进程的线程信息
-H 显示线程信息,-p指定pid
如:top -Hp 12816
-
找到线程12817, 进入python, hex(12817)查看16进制0x3211
-
执行 jstack 12816 | grep 0x3211 -A 30 找到该线程堆栈信息
-
jstack信息
jstack 线程ID 可以查看某个线程的堆栈情况,特别对于hung挂死的线程,可以使用选项-F强制打印dump信息jstack -F pid
jstack定义: jstack是java虚拟机自带的一种堆栈跟踪工具。用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。
PS : 在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。也就是多进行几次线程快照,观察变化,查看问题所在。
Reference
Java 应用线上问题排查思路、工具小结:
https://juejin.cn/post/6844904155232862221
使用jstack命令dump线程信息: jstack pid > test.txt
https://blog.csdn.net/qq_36317804/article/details/89522433
三个实例演示 Java Thread Dump 日志分析:
https://www.cnblogs.com/zhengyun_ustc/archive/2013/01/06/dumpanalysis.html