我需要查看2个死锁线程的堆栈来分析情况。 JVM
现在正在运行,数据就在那里,但我需要某种工具来从流程中提取它。我只关心类型为String
的堆栈中的6个变量。任何想法都非常感谢。 JVM
个版本6_35
,它是linux
,JMX
已启用,但我没有配置profiler/debugger
连接。重现起来非常困难。
答案 0 :(得分:4)
你不能轻易做到这一点。普通jstack
工具只会转储堆栈。从技术上讲,你可以尝试转储整个堆(使用jmap
)但是如果可能的话,寻找这个特定的变量会很痛苦。
请注意,出于安全原因,这并不容易。堆栈跟踪可以包含凭据或其他敏感数据。
答案 1 :(得分:4)
我发现了一个使用堆转储查看器的小技巧(在这个例子中是YourKit,但也可能是其他工作)。基本上,您枚举Thread类的所有实例,然后按名称找到所需的线程并打开它。堆栈变量标记为<本地变量> 像这样:
并非所有变量都在这里,但显示了作为参数传递给方法的所有变量。我想知道分析者是否可以更好地解决这个问题?
答案 2 :(得分:0)
您可以在类似Unix的操作系统上使用Sun / Oracle JVM发送一个SIGQUIT进程dump and keep the VM running,而不是IBM's JVM。输出将适合您的目的,艰难。可能与另一个答案中的jstack
/ jmap
相似。