如何找到死锁的两个线程?

Jan*_*rts 5 java spring tomcat deadlock hibernate

我们在Tomcat 5.5中运行了经典的spring/hibernate/mysql堆栈.偶尔,当尝试超时锁定表行时,我们会遇到死锁.抛出某种死锁异常.

异常是明确的,堆栈跟踪指示出现了什么问题.但它没有显示持有实际锁的其他线程.除非我知道那个线程在做什么,否则它只是大海捞针.

问题:有没有办法找到另一个线程?

谢谢 !

一月

Sea*_*ean 1

下次遇到死锁时,请尝试在 MySQL 中使用以下命令。这应该显示最后一个僵局。

SHOW INNODB STATUS
Run Code Online (Sandbox Code Playgroud)

通常,当您在应用程序服务器上看到死锁时,日志仅显示受害线程(已回滚的线程)。由于另一个线程已完成,因此不会引发异常。您需要返回数据库来重新创建事务。

一旦您从数据库中捕获了死锁发生的位置,您就可以进一步调查。