我想知道是否可以使用JVMTI在Java中动态检测死锁。有两个事件指示使用同步语句在监视器上的操作:
监视器竞争进入
当线程试图进入Java编程语言监视器时发送的
,已经通过另一个线程获得了。
监视器竞争进入
在等待另一个线程释放
之后,当线程进入Java编程语言监视器时发送的。
这意味着,使用JVMTI,我只能看到那些已经锁定的监视器。我想重建一个等待图,但是没有事件指示我,锁是获得的,这是,而不是任何线程所持有的。这是不可能的。
还有其他选择吗?Unix上的SIGQUIT命令允许显示死锁的线程转储,这在JVMTI中似乎是不可能的。
发布于 2011-06-02 15:33:08
您应该能够通过JMX获得这些信息。
试一试
ManagementFactory.getThreadMXBean().findMonitorDeadlockedThreads();https://stackoverflow.com/questions/6216416
复制相似问题