`

转储IBM JVM堆内存

    博客分类:
  • Java
 
阅读更多

来自:http://publib.boulder.ibm.com/infocenter/javasdk/v1r4m2/index.jsp?topic=%2Fcom.ibm.java.doc.diagnostics.142j9%2Fhtml%2Fenabling_a_heapdump.html

 

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics