Using HeapDumpOnOutOfMemoryError parameter for heap dump for JBoss

JavaMemory LeaksJbossHeap Memory

Java Problem Overview


I was told I can add the -XX:+HeapDumpOnOutOfMemoryError parameter to my JVM start up options to my JBoss start up script to get a heap dump when we get an out of memory error in our application. I was wondering where this data gets dumped? Is it just to the console, or to some log file? If it's just to the console, what if I'm not logged into the Unix server through the console?

Java Solutions


Solution 1 - Java

Here's what Oracle's documentation has to say:

> By default the heap dump is created in > a file called java_pid.hprof in the > working directory of the VM, as in the > example above. You can specify an > alternative file name or directory > with the -XX:HeapDumpPath= option. For > example -XX:HeapDumpPath=/disk2/dumps > will cause the heap dump to be > generated in the /disk2/dumps > directory.

Solution 2 - Java

You can view this dump from the UNIX console.

The path for the heap dump will be provided as a variable right after where you have placed the mentioned variable.

E.g.:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps"

You can view the dump from the console on the mentioned path.

Solution 3 - Java

I found it hard to decipher what is meant by "working directory of the VM". In my example, I was using the Java Service Wrapper program to execute a jar - the dump files were created in the directory where I had placed the wrapper program, e.g. c:\myapp\bin. The reason I discovered this is because the files can be quite large and they filled up the hard drive before I discovered their location.

Solution 4 - Java

If you are not using "-XX:HeapDumpPath" option then in case of JBoss EAP/As by default the heap dump file will be generated in "JBOSS_HOME/bin" directory.

Solution 5 - Java

If you only configure -XX:+HeapDumpOnOutOfMemoryError parameter then heapdump will be generated in JBOSS_HOME/bin directory for OpenJDK/Oracle JDK. If you are using IBM JDK then heapdump will be created under /tmp directory as phd file. -XX:HeapDumpPath option gives us more feasibility for configuring our custom headpump path location (-XX:HeapDumpPath=/my-custom-jboss-server-path/). It's recommended to have this parameters configured in your environment as it will collect heapdump on OutOfMemory error for analyzing the issue with memory leak of the application or checking any large object retention in the application.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEdCView Question on Stackoverflow
Solution 1 - JavaMatt SolnitView Answer on Stackoverflow
Solution 2 - JavaSwaminathan KrishnamoorthiView Answer on Stackoverflow
Solution 3 - JavaB5A7View Answer on Stackoverflow
Solution 4 - JavaSwapnil ChaudhariView Answer on Stackoverflow
Solution 5 - JavaAashish PatilView Answer on Stackoverflow