You can generate a Heapdump from a running JVM in either of two ways:
Explicit generation
JVM-triggered generation
When the Java™ heap is exhausted (that is, the OutOfMemory
condition is encountered and the resulting exception is not caught or handled
by the application), JVM-triggered generation is enabled by default, as are
Heapdumps that are generated by other programming methods.
To enable
signal-based Heapdumps, set the IBM_HEAPDUMP
or IBM_HEAP_DUMP
environment variable to any value,
export IBM_HEAPDUMP=<any_value>
export IBM_HEAP_DUMP=<any_value>
or set the appropriate JAVA_DUMP_OPTS
before you start the Java process. You can also use the -Xdump agent
option to get more fine-grained control over
Heapdumps. See Using dump agents
for more information.
To display on JVM startup the conditions (if any) that will generate a
Heapdump (or javadump or systemdump), you can use -Xdump:what
. See Using dump agents
for more information.
To disable generation of a Heapdump, on platforms other
than Windows® use:
unset IBM_HEAPDUMP
unset IBM_HEAP_DUMP
On Windows, use:
set IBM_HEAPDUMP=
set IBM_HEAP_DUMP=
Explicit generation of a Heapdump
You can explicitly generate
a Heapdump in the following
ways:
By sending a signal to the JVM from the operating system
By using the HeapDump()
method inside Java code
that is being executed
By using the JVMRI to request a Heapdump from a loaded agent
You can explicitly request
a Heapdump in the same
way as a Javadump. Before the Heapdump starts, the heap is locked and remains
locked until the whole Heapdump file is written to disk. This operation can
affect the behavior of your Java application, and make it unresponsive
while the dump is being produced.
For Linux and AIX®, send the JVM the signal SIGQUIT
(kill -QUIT
, or Ctrl+\ in the console window).
For Windows, generate a SIGINT (press the Ctrl+Break keys
simultaneously).
You can explicitly request a Heapdump from a Java method. The class com.ibm.jvm.Dump
contains a static HeapDump()
method that
causes Java code to initiate a Heapdump. To
use the methods in the com.ibm.jvm.Dump
class, you must
have the underlying VM Reliability, Availability, and Serviceability Interface
(JVMRI) enabled, by setting -Xtrace
on the Java command
line. For more information about JVMRI, see Using the Reliability, Availability, and Serviceability
Interface
.
Triggered generation of a Heapdump
The following events automatically trigger the JVM to produce a Heapdump
(if enabled):
An OutOfMemory or heap exhaustion condition occurs and
the resulting exception is not caught or handled by the application
If Heapdumps are enabled, they are normally produced immediately
before a Javadump.
The first option is enabled by default, and you can see it with -Xdump:what
. It gives a snapshot of the Java heap
when no more memory is available. Usually, this snapshot is the most useful
output to help you determine the cause of an OutOfMemory condition that is
related to the Java heap. It works independently of the IBM_HEAPDUMP
environment variable. So, by default, you get Heapdumps
only when no more heap space is available; you do not get Heapdumps in crashes
or through a signal to the JVM. You can disable this feature, and a similar
one for Javadumps, by using IBM_HEAPDUMP_OUTOFMEMORY=FALSE
and IBM_JAVADUMP_OUTOFMEMORY=FALSE
respectively.
Sometimes an application will catch and handle an OutOfMemory
condition, in which case no heapdumps will be taken. You can force heapdump
generation for any handled OutOfMemory conditions, by setting IBM_HEAPDUMP_OUTOFMEMORY=TRUE
and IBM_JAVADUMP_OUTOFMEMORY=TRUE
respectively.
Enabling text formatted ("classic") Heapdumps
The generated Heapdump is by default in the binary, platform-independent,
phd format, which can be examined using the available tooling (see Available tools for processing Heapdumps
).
However, it is sometimes useful to have an immediately readable view of the
heap. You can obtain this view by using the opts=
stanza
with -Xdump:heap
(see Using dump agents
)
or by the existence of an environment variable:
IBM_JAVA_HEAPDUMP_TEST
, which allows you to perform
the equivalent of opts=PHD+CLASSIC
IBM_JAVA_HEAPDUMP_TEXT
, which allows the equivalent
of opts=CLASSIC