0

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

监控竞争进入

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

监视器竞争进入

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

这意味着,使用 JVMTI 我只能看到那些已经被锁定的监视器。我想重建一个等待图,但没有事件告诉我,获取了一个被任何线程持有的锁。这是不可能的。

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

4

1 回答 1

1

您应该能够通过 JMX 获取此信息。

尝试

ManagementFactory.getThreadMXBean().findMonitorDeadlockedThreads();
于 2011-06-02T15:33:08.087 回答