我想知道是否可以使用 JVMTI 动态检测 Java 中的死锁。有两个事件指示使用同步语句在监视器上执行的操作:
监控竞争输入
Sent when a thread is attempting to enter a Java programming language monitor already acquired by another thread.
监控已输入的争用
Sent when a thread enters a Java programming language monitor after waiting for it to be released by another thread.
这意味着,使用 JVMTI 我只能看到那些已经锁定的监视器。我想重建一个等待图,但没有事件指示我,已获取一个锁,该锁不由任何线程持有。这是不可能的。
还有其他选择吗? Unix 上的 SIGQUIT 命令允许显示死锁的线程转储,这在 JVMTI 中似乎是不可能的。
最佳答案
您应该能够通过 JMX 获取此信息。
尝试
ManagementFactory.getThreadMXBean().findMonitorDeadlockedThreads();
关于java - 使用 JVMTI 进行死锁检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6216416/