Failed to create heap reset due to ReadVirtual error

We have a JBoss application server running in the Java 6 45 update. We run into OutOfMemoryErrors, which we most likely introduced ourselves. We would like to analyze them and want to create a bunch of heaps. This is not performed with the exception below.

A googling and stackoverflow search did not help me, does anyone have an idea on how to get a bunch of dump from this machine?

Thanks!

Martin

The exception is:

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 
+6
source share
2 answers

Hmm, found the answer on another website, and it seems to work. Now we request the JVM to dump the heap when it encounters an OutOfMemoryError with the following parameters:

 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java_pid<pid>.hprof 

As found by:

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

0
source

Please check below items

  • Launch the console as an administrator
  • the JDK version (for the jmap command) and the JRE (Java application runtime) should be the same.
  • If the received exception with JDK / JRE 7try matches JDK / JRE 8

I actually ran into some problem in jmap with JDK 7, but when I switched to JDK 8, I was able to successfully generate a heap dump using the following command

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

0
source

Source: https://habr.com/ru/post/947712/


All Articles