出现死锁问题要怎么排查?

回答·9
最热
最新
  • 代码加注释,代码屏蔽
  • c,c++ 开发的程序 gdb 调试来查看
  • 都什么年代了还有这问题?
  • gdb 看线程堆栈就可以看出来。
  • 额,我理解是看门狗+线程栈信息+线程使用率来综合查看。
  • 在每处调用了锁的地方都输出一个消息(可用结构体表示),消息里的数据包括:时间、代码位置、锁 ID、操作类型(获取锁或释放锁)、调用堆栈等。消息的输出方式可根据实际项目选择。然后另外写一个消息分析程序。程序内维护一个消息队列,队列主键为锁 ID。当收到“获取锁”消息时,将消息新增到队列;当收到“释放锁”消息时,根据锁 ID 在队列中查找,若存在则移除。然后定时遍历检查队列中各消息的时间,超过合理时间未释放则可认为是死锁。
  • Jdk 自带的 jstat 命令可以排查线程死锁
  • 看门狗相关机制安排上!
  • pstack 打印 log 综合分析