java - 从正在运行的程序或 Java 中的转储中获取死锁检测

标签 java jvm deadlock dump memory-dump

我有一个正在运行的 Java 软件被卡住了。我想看看里面的景色,但不知道该怎么做。

有没有什么工具可以提供 PID,它会告诉我每个线程当前所在的位置,也许还有一些变量值?我正在运行 Linux。

我或多或少知道是什么导致了问题,但仍有一些可能的情况,因此查明它会很好。

我无法重现错误,因为它每隔几天出现一次,调试时从未出现过,所以这是一个独特的认识敌人的变化。

有什么想法吗?

最佳答案

其实你可以尝试使用visualvm + 它的 threads monitoring plugin .您还可以进行线程转储,查看线程堆栈跟踪及其状态。您也可以使用 jconsole来检测死锁。这两个工具都是 JDK 的一部分。 JConsole

Here是关于使用 visualvm 进行线程分析的更多信息。

关于java - 从正在运行的程序或 Java 中的转储中获取死锁检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8126711/

相关文章:

java - "Found 1 deadlock"但跟踪显示未被任何线程锁定

java - 这是集成测试还是单元测试?

java - FileChannel#map 的内存使用

java - 我们如何知道 Spring Boot 应用程序是否正在使用连接池

java - 为什么每个应用程序有一个 JVM?

jvm - 当前的 HotSpot JVM 默认是并行运行的吗?

java - 使用 if、else if、else 重写 java 中的 switch 语句

Grails 应用程序占用更多内存?

go - 写入 channel 永远被阻止

java - Spring @Transactional 具有来自不同调用源的不同隔离级别