java - 由于 ReadVirtual 失败,无法创建堆转储

标签 java jboss jboss7.x java-6 jvm-hotspot

我们有一个在 Java 6 update 45 中运行的 JBoss 应用程序服务器。我们遇到了很可能是我们自己引入的 OutOfMemoryErrors。我们想分析这些并想创建一个堆转储。此操作失败,但出现以下异常。

谷歌搜索和搜索 stackoverflow 对我帮助不大,有没有人知道如何从这台机器上获取堆转储?

谢谢!

马丁

异常(exception)情况是:

C:\>"d:\Program Files\Java\bin\"jmap -F "-dump:format=b,file=D:\heapdumps\20130620_085902_heap.dump" 1832
Attaching to process ID 1832, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.45-b01
Dumping heap to D:\heapdumps\20130620_085902_heap.dump ...
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at sun.tools.jmap.JMap.runTool(JMap.java:179)
        at sun.tools.jmap.JMap.main(JMap.java:110)
Caused by: sun.jvm.hotspot.debugger.DebuggerException: Windbg Error: ReadVirtual failed!
        at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readBytesFromProcess0(Native Method)
        at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readBytesFromProcess(WindbgDebuggerLocal.java:485)
        at sun.jvm.hotspot.debugger.DebuggerBase$Fetcher.fetchPage(DebuggerBase.java:76)
        at sun.jvm.hotspot.debugger.PageCache.getPage(PageCache.java:178)
        at sun.jvm.hotspot.debugger.PageCache.getInt(PageCache.java:96)
        at sun.jvm.hotspot.debugger.DebuggerBase.readCInteger(DebuggerBase.java:355)
        at sun.jvm.hotspot.debugger.DebuggerBase.readCompOopAddressValue(DebuggerBase.java:459)
        at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readCompOopHandle(WindbgDebuggerLocal.java:332)
        at sun.jvm.hotspot.debugger.windbg.WindbgAddress.getCompOopHandleAt(WindbgAddress.java:122)
        at sun.jvm.hotspot.oops.Oop.getKlassForOopHandle(Oop.java:235)
        at sun.jvm.hotspot.oops.ObjectHeap.newOop(ObjectHeap.java:378)
        at sun.jvm.hotspot.oops.ObjectHeap.iterateLiveRegions(ObjectHeap.java:464)
        at sun.jvm.hotspot.oops.ObjectHeap.iterate(ObjectHeap.java:249)
        at sun.jvm.hotspot.utilities.AbstractHeapGraphWriter.write(AbstractHeapGraphWriter.java:51)
        at sun.jvm.hotspot.utilities.HeapHprofBinWriter.write(HeapHprofBinWriter.java:416)
        at sun.jvm.hotspot.tools.HeapDumper.run(HeapDumper.java:56)
        at sun.jvm.hotspot.tools.Tool.start(Tool.java:221)
        at sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:77)
        ... 6 more

最佳答案

请检查以下几点,

  1. 以管理员身份运行命令控制台
  2. JDK(用于 jmap 命令)和 JRE(Java 应用程序运行环境)的版本应该相同。
  3. 如果 JDK/JRE 7 出现异常,请尝试使用 JDK/JRE 8 进行同样的操作

实际上我在使用 JDK 7 的 jmap 中遇到了一些问题,但是当我转移到 JDK 8 时,我能够使用以下命令成功生成堆转储

jmap -dump:file=d:\heapdump\myHeapDump.hprof -F

关于java - 由于 ReadVirtual 失败,无法创建堆转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17208186/

相关文章:

java - 无法从类 io.netty.channel.sctp.nio.NioSctpChannel 创建 channel

java - EAR 包和 Bean 如何共享 session ID?

java - 在 JBoss 7.2 中查找 SessionContext

java - 将.xls文件导入数据库Jboss

jpa - 无法使 JTA 在带有 spring 3.1 的 jboss AS7.1 上工作

java - ArrayList 或 LinkedList 哪个是最好的集合,因为总是移动所有条目的位置,同时频繁删除第一个条目?

java - 我可以使用哪种算法或库来检测 map 图 block 上的重复图像?

java - 如何在 JBoss 7 中设置 java 版本?

jboss - JBOSS中如何获取SessionContext

java - Java中的初始化顺序