我有一段Java代码有时会导致JVM“挂起”。发生这种情况时,我无法通过像jvisualvm
这样的工具与它通信(该工具会说“连接超时”),并且当我发出{{1}时它也不会打印线程转储或终止}(SIGQUIT
)。如果我发出SIGABRT(kill -3
),该过程将终止。
因此,我无法获得线程转储,也无法找到其内存中的内容。如何在这种情况下获得更多信息?如果有帮助,操作系统为kill -6
,我的JVM版本为
OSX
答案 0 :(得分:1)
你不能,这就是它被称为“挂起”的原因。由于内部问题(例如无限循环,死锁......),JVM进程无响应,因此它不会响应。这可能是由于JVM实现中的错误。您可以尝试调试JVM以查明发生的情况。 HotSpot是GPL,所以你也可以获得源代码。
如果您怀疑代码中的某些内容导致此挂起(例如,JVM在执行特定操作时始终挂起),您可以粘贴它以便我们查看。