当java 程序堵塞 任何异常 信息,该如何排查。
先确实是否死锁问题,使用arthas ,执行 thread -b 命令。
不是死锁问题,执行 jstack 命令 保留 当前执行命令。
未知全貌 不予置评
打完 jstack ,一定不要着急 下结论。只有了解程序的全部逻辑,你才能 合理地解决问题。从 主线程(#1)进行查看,先分析 主线程在什么停顿,通过主线程的调用栈,就可以大概了解 整个程序的逻辑。
然后 将其他线程的调用栈信息进行查看汇总,结合代码,基本就可以确定 堵塞的方法。
如果 有日志的话,查看日志的最后打印信息,帮助快速定位问题。
1 read 等待 输入流
2 wait 之后没有执行notify
3 存在线程一直死循环,抢占了资源