打开堆转储时出错

Posted

技术标签:

【中文标题】打开堆转储时出错【英文标题】:Error Opening heap dump 【发布时间】:2015-06-16 18:48:59 【问题描述】:

我无法使用独立的 eclipse 内存分析器或 visualVM 打开堆转储。我尝试了两个不同的 hprof 文件。 VisualVM 只是在加载堆转储时挂起,eclipse 内存分析器给了我以下错误。

Error opening heap dump 'java_pid15751.hprof'. Check the error log for further details.
Error opening heap dump 'java_pid15751.hprof'. Check the error log for further     details.
Not a HPROF heap dump (java.io.IOException)
Not a HPROF heap dump

我使用的是 Windows 7 32 位。应用服务器在 jboss 7.1.1 上,java 版本如下。 OpenJDK 运行时环境 (IcedTea6 1.10.6) (rhel-1.43.1.10.6.el6_2-x86_64) OpenJDK 64-Bit Server VM(build 20.0-b11,混合模式)

【问题讨论】:

之前的回答可能会有所帮助:***.com/questions/24868926/… 感谢您查看 evictorr,但这不是 IBM Java 环境,所以我认为这不是问题。 你能分享一下堆转储吗?能否贴出VisualVM的日志内容(Help->About->Logfile)?可以尝试在 64 位机器上打开 heapdump 吗? 【参考方案1】:

我怀疑您的堆转储文件已损坏。你是如何捕获堆转储文件的? This article 概述了捕获堆转储的几种不同选项。 JDK 中的“jmap”工具是捕获堆转储的好工具。您可以通过以下命令调用它:

  jmap -dump:format=b,file=<heap-dump-file-path> <process-id>

其中heap-dump-file-path: 是将写入堆转储的文件路径。process-id: 是Java 进程 ID,应捕获其堆转储

示例: jmap -dump:format=b,file=/opt/tmp/heapdump.bin 37320

【讨论】:

【参考方案2】:

这些堆转储是由于 JBoss 中的内存不足问题导致的,其中自动堆被占用。我用jmap拍了一张,打开很好。我认为堆转储由于某种原因已损坏。

【讨论】:

以上是关于打开堆转储时出错的主要内容,如果未能解决你的问题,请参考以下文章

核心转储,如何增加矩阵维度(可用),在 C 中释放 2d 指针时出错

gcc地址清理程序核心转储出错

将数据从 oracle DB 转储到 excel 时出错 - java.lang.NoSuchMethodError: org.apache.poi.hssf.record.BOFRecord.set

Windows由于在创建转储期间出错,创建转储文件失败导致的蓝底白字蓝屏重启,最全细解决方案

跨平台导入 MySQL 数据时出错(MAMP 到 WIMP)

安装 gem 时出错:无法为 cygwin 的堆预留空间,Win32 错误 487