在抛出OutOfMemoryError时将JVM设置为转储堆

时间:2011-04-05 15:26:23

标签: java java-ee

我正在尝试设置我正在处理的服务器的JVM,因此它会在发生OOME时将堆转储到文件中。

我知道我必须将此选项-XX:-HeapDumpOnOutOfMemoryError添加到某处的JVM参数中,但我无法知道如何执行此操作。

仅供参考,我可以通过PuTTY访问服务器,所以我正在寻找一种命令行方式。

我使用的JVM是OpenJDK64-Bit Server VM。

我不知道这是否相关,但该应用程序是一个war文件。

PS : ps -ef|grep java

tomcat   23837     1  0 Mar25 ?        00:03:46 /usr/lib/jvm/jre/bin/java -classpath :/usr/share/tomcat6/bin/bootstrap.jar:/usr/share/tomcat6/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat6 -Dcatalina.home=/usr/share/tomcat6 -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat6/temp -Djava.util.logging.config.file=/usr/share/tomcat6/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start

编辑:

我找到了一些东西,如果我错了就纠正我:因为我使用的是Tomcat,所以我决定在tomcat.conf文件中添加这些行:

JAVA_OPTS = -XX:-HeapDumpOnOutOfMemoryError

JAVA_OPTS = -XX:HeapDumpPath = /根/转储

JAVA_OPTS = -Xmx20m

您怎么看?

2 个答案:

答案 0 :(得分:26)

HotSpot VM options中的此选项。我认为它在OpenJDK VM中是相同的,但如果不是,请告诉我。

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path to dump file>

如果您知道进程ID:

,也可以使用jmap手动生成内存映射

jmap -J-d64 -dump:format=b,file=<path to dump file> <jvm pid>

您可以使用JHat来分析转储。

jhat <path to dump file>

答案 1 :(得分:6)

正如@CoolBeans所提到的,要使用的JVM选项是:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path to dump file>

要在tomcat中进行设置,请在TOMCAT_HOME / bin目录下创建一个名为setenv.sh(setenv.bat for windows)的文件。添加以下行

export CATALINA_OPTS="$CATALINA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path to dump file>"

CATALINA_OPTS是这类选项的首选,因为它们不需要应用于关机过程。