试图查看无响应的JVM堆栈:jvisualvm和jconsole都无法连接

时间:2014-03-17 16:33:50

标签: jvm jconsole jvisualvm

我的本​​地计算机上有一个Java程序在一段时间后变得没有响应,并且似乎冻结而没有取得进一步的进展。我想它会阻塞某个地方(它通过HTTP和JDBC访问远程资源,因此可能会出现阻塞情况)。我试图连接到它以查看主线程的堆栈的视图,以便了解块发生的位置。 jvisualvmjconsole都列出了有问题的JVM(在我的系统中运行的其他JVM),但两者都无法连接。

jconsole使用“连接失败”(即使我尝试使用不安全的选项)。

jvisualvm似乎已连接,但当我点击'sampler'标签查看堆栈时,它会通过以下屏幕截图进行投诉:

enter image description here

问题是我正在使用相同的实用程序(jconsolejvisualvm)来连接我系统中的其他JVM,而我没有使用in this answer提到的任何JMX选项我没有任何问题。如何获取这个无响应的JVM堆栈以查看它阻塞的位置?

2 个答案:

答案 0 :(得分:2)

今天我遇到了一个类似的问题,一个完全卡住的JVM,我无法正确地将jconsole / jvisualvm附加到它上面。此外kill -3 <PID>未成功(没有线程转储)。

我能够使用kill -11 <PID>触发JVM的coredump并将其提供给jstack,如下所示:jstack /path/to/java /path/to/core.file。从jstack输出我能够提取一些有用的堆栈信息。

答案 1 :(得分:1)

您可以使用kill -3 <PID> 收集主题转储

这将显示所有线程及其被阻止的位置。