使用JVMTI进行死锁检测

时间:2011-06-02 15:09:06

标签: java multithreading deadlock jvmti

我想知道是否可以使用JVMTI在Java中动态检测死锁。有两个事件使用synchronized语句指示监视器上的操作:

监视器争用输入

  

当线程尝试通过另一个线程进入已获取的Java编程语言监视器时发送。

监控已参加竞争

  

当一个线程在等待另一个线程释放>后进入Java编程语言监视器时发送。

这意味着,对于JVMTI,我只能看到那些已被锁定的监视器。我想重建一个等待图,但没有事件表明我,获得了一个锁,任何线程都 。这是不可能的。

有替代品吗? Unix上的SIGQUIT命令允许显示死锁的线程转储,看起来这在JVMTI中是不可能的。

1 个答案:

答案 0 :(得分:1)

您应该可以通过JMX获取此信息。

尝试

ManagementFactory.getThreadMXBean().findMonitorDeadlockedThreads();