[英]Is it possible to view threads from hprof dump / threads in heap dump
我有一个大的(5GB)hprof转储,当发生OutOfMemoryError
时由应用程序创建。 (使用XX:HeapDumpOnOutOfMemoryError )。
不幸的是,发生此错误时没有收集日志。 重新创建这将需要几个小时。 我希望有些工具可以显示异常堆栈跟踪或来自hprof的所有线程堆栈等。
我目前正在使用MAT ,无法看到获取线程信息的方法。 我可以使用哪种工具?
(我不确定hprof文件是否有关于OOM发生时调用的线程/位置的信息)。
(我知道在正常情况下如何进行线程转储。这里的麻烦就是已经发生的事件,我所拥有的只是hprof转储。)
回答自己的问题。 积分归于@RC
我不认为堆转储包含除GC根之外的线程信息。 如果需要与线程相关的信息,还需要进行线程转储。
Eclipse MAT允许您在Leak suspects报告中查看可疑线程。 在应用程序命名空间中查找具有行号的类,以查找它们在堆中占用的内存量。 这会给你一些泄漏的课程。
你可以杀死-3进程id以获得标准输出的线程转储。 这不会杀死java进程,因此您可以根据需要多次执行此操作。
正如RC所说,visualVM是一个很好的工具,可以按类类型和各种图形和分析工具为您提供对象计数。
使用visualvm。
当perm堆空间超过时,尝试分析图表...你还应检查内存样本并保存其快照..
分析线程堆栈...将帮助您缩小问题范围。
要打开您需要的选项+
并关闭您需要的选项-
令人困惑的是,它显示了默认设置,使其“清除”您已经设置的内容。 带+的那些默认情况下处于启用状态,而带有 - 的处于默认状态。 这意味着如果您从文档中复制任何+或 - 选项,它们应该什么都不做(除非默认值随时间发生变化)
-XX:-HeapDumpOnOutOfMemoryError关闭堆转储,这是默认值。
-XX:+ HeapDumpOnOutOfMemoryError打开堆转储。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.