java - 使用 JVMTI 进行死锁检测

标签 java multithreading deadlock jvmti

我想知道是否可以使用 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/

相关文章:

Java:ArrayList如何管理内存

java - Apache camel,一条通往 "join"2条路线的路

java - 在tomcat上运行查询cypher,Scala库出错

C++清除队列和线程安全

sql-server - SQL Server 在选择/更新或多选择之间死锁

javascript - 我在 jsp 中有一个表,有 5 行和 3 列,我想在 servlet 中打印它,我该怎么做?

java - Java volatile read flush writes,和volatile write update reads

java - Cucumber-jvm线程安全吗?

c++ - 防止代码死锁的锁定策略和技巧

go - 一例 `all goroutines are asleep - deadlock!`我不知道为什么