我正在尝试设置我正在使用的服务器的 JVM,因此它会在发生 OOME 时将堆转储到文件中。
我知道我必须将此选项 -XX:-HeapDumpOnOutOfMemoryError
添加到某处的 JVM 参数,但我不知道该怎么做。
仅供引用,我可以通过 PuTTY 访问服务器,所以我正在寻找执行此操作的命令行方式。
我使用的 JVM 是 OpenJDK64 位服务器 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=/root/dump
JAVA_OPTS=-Xmx20m
你怎么看?
最佳答案
此选项来自 HotSpot VM options .我认为它在 OpenJDK VM 中是相同的,但如果不是,请告诉我。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path to dump file>
您还可以使用 jmap 手动生成内存映射。如果您知道进程 ID:
jmap -J-d64 -dump:format=b,file=<path to dump file> <jvm pid>
您可以使用 JHat分析转储。
jhat <path to dump file>
关于java - 设置 JVM 以在抛出 OutOfMemoryError 时转储堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5554341/