如何检查线程是否死锁了?
https://www.cnblogs.com/lovedesy123/p/7752077.html
pstack和jstack判断死锁,都需要多执行几次命令,观察每次的输出结果,才能推测是否死锁了。
gdb:
1 运行程序,设置能影响程序运行的参数和环境 ;
2 控制程序在指定的条件下停止运行;
3 当程序停止时,可以检查程序的状态;
4 当程序 crash 时,可以检查 core 文件;
5 可以修改程序的错误,并重新运行程序;
6 可以动态监视程序中变量的值;
7 可以单步执行代码,观察程序的运行状态。
线程死锁分析:
- 连续多次执行 $pstack <pid> 其中PID是进程号
查看每个线程的函数调用关系的堆栈,观察每个线程当前的执行点是否在等待一个锁。
多次执行该命令,发现某些线程的当前执行点不变,总是在等待同一个锁,就可以怀疑是否死锁了。
如果怀疑哪些线程发生死锁了,可以采用gdb 进一步attach线程并进行分析。</pid>