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

Jay*_*yan 8 java hprof heap-dump eclipse-mat

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

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

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

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

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

Jay*_*yan 12

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

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

视觉vm与heapdump中的线程


mat*_*t b 5

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

线程概述

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

工具栏图标的屏幕截图

  • 此外,所有堆栈跟踪(带有一些附加信息)都在 MAT 解析目录中的 .threads 文件中 (3认同)