java – 有没有办法用ibm-jdk for linux进行实时堆转储?

我知道当在这个JVM上发生OutOfMemoryException时可以转储堆,但是可以用jmap或jconsole等工具询问实时转储吗?

解决方法

您需要知道存在“系统”转储(基本上是OS核心文件)和“堆”又称可移动堆转储(PHD).后者不太有用,因为它们不包含实际数据.它们认启用.

在AIX或Linux上通常,您将设置-Xdump:system(-Xdump:system:events = gpf user的缩写)以允许kill -3< pid>触发堆转储.

顺便说一句,您可以使用认选项使用kill -ABRT< pid>.但是,这将终止您的JVM.

运行java -Xdump:看什么认值,如:

> /usr/java6/bin/java -Xdump:what -version

Registered dump agents
----------------------
-Xdump:system:
    events=gpf+abort+traceassert,label=/home/u0002824/core.%Y%m%d.%H%M%s.%pid.%seq.dmp,range=1..0,priority=999,request=serial
----------------------
...
java version "1.6.0"
Java(TM) SE Runtime Environment (build pap3260sr9fp2-20110627_03(SR9 FP2))

打开系统转储:

> /usr/java6/bin/java -Xdump:system -Xdump:what -version

Registered dump agents
----------------------
-Xdump:system:
    events=gpf+user+abort+traceassert,request=serial
----------------------
-Xdump:heap:
    events=systhrow,filter=java/lang/OutOfMemoryError,label=/home/u0002824/heapdump.%Y%m%d.%H%M%s.%pid.%seq.phd,range=1..4,priority=500,request=exclusive+compact+prepwalk,opts=PHD
----------------------
-Xdump:java:
    events=gpf+user+abort+traceassert,label=/home/u0002824/javacore.%Y%m%d.%H%M%s.%pid.%seq.txt,priority=400,request=exclusive+preempt
----------------------
-Xdump:java:
    events=systhrow,request=exclusive+preempt
----------------------
-Xdump:snap:
    events=gpf+abort+traceassert,label=/home/u0002824/Snap.%Y%m%d.%H%M%s.%pid.%seq.trc,priority=300,request=serial
----------------------
-Xdump:snap:
    events=systhrow,request=serial
----------------------
...

不要忘记在核心上运行jre / bin / jextract. * .dmp文件.

相关文章

应用场景 C端用户提交工单、工单创建完成之后、会发布一条工...
线程类,设置有一个公共资源 package cn.org.chris.concurre...
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量