读书人

转储IBM JVM堆内存储器

发布时间: 2012-12-28 10:29:04 作者: rapoo

转储IBM JVM堆内存

来自: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 generationJVM-triggered generation

When the Java? heap is exhausted (that is, the OutOfMemorycondition is encountered and the resulting exception is not caught or handledby the application), JVM-triggered generation is enabled by default, as areHeapdumps that are generated by other programming methods. To enablesignal-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 agentoption to get more fine-grained control overHeapdumps. See Using dump agents for more information.

To display on JVM startup the conditions (if any) that will generate aHeapdump (or javadump or systemdump), you can use -Xdump:what. See Using dump agents for more information.

To disable generation of a Heapdump, on platforms otherthan 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 followingways:

By sending a signal to the JVM from the operating systemBy using the HeapDump() method inside Java codethat is being executedBy using the JVMRI to request a Heapdump from a loaded agent

You can explicitly request a Heapdump in the sameway as a Javadump. Before the Heapdump starts, the heap is locked and remainslocked until the whole Heapdump file is written to disk. This operation canaffect the behavior of your Java application, and make it unresponsivewhile 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 keyssimultaneously).

You can explicitly request a Heapdump from a Java method. The class com.ibm.jvm.Dump contains a static HeapDump() method thatcauses Java code to initiate a Heapdump. Touse the methods in the com.ibm.jvm.Dump class, you musthave the underlying VM Reliability, Availability, and Serviceability Interface(JVMRI) enabled, by setting -Xtrace on the Java commandline. For more information about JVMRI, see Using the Reliability, Availability, and ServiceabilityInterface.

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 andthe resulting exception is not caught or handled by the applicationIf Heapdumps are enabled, they are normally produced immediatelybefore a Javadump.

The first option is enabled by default, and you can see it with -Xdump:what. It gives a snapshot of the Java heapwhen no more memory is available. Usually, this snapshot is the most usefuloutput to help you determine the cause of an OutOfMemory condition that isrelated to the Java heap. It works independently of the IBM_HEAPDUMP environment variable. So, by default, you get Heapdumpsonly when no more heap space is available; you do not get Heapdumps in crashesor through a signal to the JVM. You can disable this feature, and a similarone for Javadumps, by using IBM_HEAPDUMP_OUTOFMEMORY=FALSE and IBM_JAVADUMP_OUTOFMEMORY=FALSE respectively.

Sometimes an application will catch and handle an OutOfMemorycondition, in which case no heapdumps will be taken. You can force heapdumpgeneration 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 theheap. You can obtain this view by using the opts= stanzawith -Xdump:heap (see Using dump agents)or by the existence of an environment variable:

IBM_JAVA_HEAPDUMP_TEST, which allows you to performthe equivalent of opts=PHD+CLASSICIBM_JAVA_HEAPDUMP_TEXT, which allows the equivalentof opts=CLASSIC

读书人网 >编程

热点推荐