【发布时间】:2011-06-02 15:09:06
【问题描述】:
我想知道是否可以使用 JVMTI 在 Java 中动态检测死锁。使用 synchronized 语句有两个事件指示监视器上的操作:
监控竞争进入
当一个线程试图进入一个 Java 编程语言监视器已经被另一个线程获取时发送。
显示器竞争进入
当一个线程等待另一个线程释放之后进入 Java 编程语言监视器时发送。
这意味着,使用 JVMTI 我只能看到那些已经被锁定的监视器。我想重建一个等待图,但没有事件告诉我,获取了一个 不 由任何线程持有的锁。这是不可能的。
还有其他选择吗? Unix 上的 SIGQUIT 命令允许显示死锁的线程转储,这在 JVMTI 中似乎是不可能的。
【问题讨论】:
标签: java multithreading deadlock jvmti