繁体   English   中英

是否可以在堆转储中查看来自hprof dump / threads的线程

[英]Is it possible to view threads from hprof dump / threads in heap dump

我有一个大的(5GB)hprof转储,当发生OutOfMemoryError时由应用程序创建。 (使用XX:HeapDumpOnOutOfMemoryError )。

不幸的是,发生此错误时没有收集日志。 重新创建这将需要几个小时。 我希望有些工具可以显示异常堆栈跟踪或来自hprof的所有线程堆栈等。

我目前正在使用MAT ,无法看到获取线程信息的方法。 我可以使用哪种工具?

(我不确定hprof文件是否有关于OOM发生时调用的线程/位置的信息)。

(我知道在正常情况下如何进行线程转储。这里的麻烦就是已经发生的事件,我所拥有的只是hprof转储。)

回答自己的问题。 积分归于@RC

  1. 使用visualvm打开转储。 这需要一段时间。
  2. 点击“堆转储时的线程”

视觉vm与heapdump中的线程

MAT 现在可以直接显示线程 (也许这是在提出问题后添加的)。

线程概述

要获得堆转储中所有线程的概述,请使用工具栏中的“线程概述”按钮,如下图所示。 或者,可以使用查询浏览器>线程概述和堆栈查询:

工具栏图标的屏幕截图

我不认为堆转储包含除GC根之外的线程信息。 如果需要与线程相关的信息,还需要进行线程转储。

Eclipse MAT允许您在Leak suspects报告中查看可疑线程。 在应用程序命名空间中查找具有行号的类,以查找它们在堆中占用的内存量。 这会给你一些泄漏的课程。

你可以杀死-3进程id以获得标准输出的线程转储。 这不会杀死java进程,因此您可以根据需要多次执行此操作。

正如RC所说,visualVM是一个很好的工具,可以按类类型和各种图形和分析工具为您提供对象计数。

使用visualvm。

当perm堆空间超过时,尝试分析图表...你还应检查内存样本并保存其快照..

分析线程堆栈...将帮助您缩小问题范围。

要打开您需要的选项+并关闭您需要的选项-

令人困惑的是,它显示了默认设置,使其“清除”您已经设置的内容。 带+的那些默认情况下处于启用状态,而带有 - 的处于默认状态。 这意味着如果您从文档中复制任何+或 - 选项,它们应该什么都不做(除非默认值随时间发生变化)

-XX:-HeapDumpOnOutOfMemoryError关闭堆转储,这是默认值。

-XX:+ HeapDumpOnOutOfMemoryError打开堆转储。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM