我需要查看2个死锁线程的堆栈来分析情况.现在JVM是现场直播,数据就在那里,但是我需要某种工具来从流程中提取它.我只关心类型堆栈中的6个变量String.任何想法都非常感谢.JVM版本6_35,它是a linux,JMX已启用,但我没有profiler/debugger配置连接.重现起来非常困难.
我有以下jHiccup结果.

显然,图中有几秒钟的巨大峰值.我的应用程序每100毫秒左右输出一次日志.当我阅读我的日志时,我从未看到如此巨大的停顿.此外,我可以从JVM诊断中检查GC中花费的总时间,并说明以下内容:
Time:
2013-03-12 01:09:04
Used:
1,465,483 kbytes
Committed:
2,080,128 kbytes
Max:
2,080,128 kbytes
GC time:
2 minutes on ParNew (4,329 collections)
8.212 seconds on ConcurrentMarkSweep (72 collections)
Run Code Online (Sandbox Code Playgroud)
72个独立系列的总大GC时间约为8秒.根据我的JVM提示,所有这些都低于200毫秒,以限制暂停.
另一方面,我在我的独立网络日志(wireshark)中发现了一个5秒的网络响应时间实例.这意味着暂停存在,但它们不是GC,它们不是阻塞线程或可以在分析器或线程转储中观察到的东西.
我的问题是调试或调整此行为的最佳方法是什么?
另外,我想了解jHiccup如何进行测量.显然它不是GC暂停时间.
如果进程崩溃,那么仅由该erlang进程引用的文件描述符会发生什么?是否有某种方法可以像操作系统进程或某些可能有用的设计模式一样自动清理erlang?