12

我需要查看 2 个死锁线程的堆栈来分析情况。它现在JVM是实时的并且数据在那里,但我需要某种工具来从流程中提取它。我只关心类型堆栈中的 6 个变量String。任何想法都非常感谢。JVM版本6_35,它是一个linuxJMX已启用,但我没有profiler/debugger配置连接。很难复制。

4

3 回答 3

6

我发现了一个使用堆转储查看器的小技巧(在本例中为 YourKit,但可能其他人也可以)。基本上,您枚举 Thread 类的所有实例,然后按名称找到所需的线程并打开它。堆栈变量被标记为<local variable>,如下所示:

在此处输入图像描述

并非所有变量都在这里,但所有作为参数传递给方法的变量都会显示出来。我想知道分析器是否可以更好地解决这个问题?

于 2013-03-05T23:53:57.180 回答
3

你不能轻易做到这一点。普通jstack工具只会转储堆栈。从技术上讲,您可以尝试转储整个堆(使用jmap),但如果可能的话,寻找这个特定的变量可能会很痛苦。

请注意,出于安全原因,这并不容易实现。堆栈跟踪可以包含凭据或其他敏感数据。

于 2012-11-13T18:17:48.567 回答
0

您可以向该进程发送一个SIGQUIT 信号,它将为您提供转储并保持 VM在具有 Sun/Oracle JVM 的类 Unix 操作系统上运行,IBM 的 JVM 也是如此——不确定输出是否适合您的目的,艰难的。可能类似于jstack/jmap在另一个答案中。

于 2012-11-13T18:27:48.223 回答