java - 设置 JVM 以在抛出 OutOfMemoryError 时转储堆

标签 java jakarta-ee

我正在尝试设置我正在使用的服务器的 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/

相关文章:

jakarta-ee - 如何在需要应用服务器运行的遗留代码上有效地使用 ApprovalTests?

java - 将本地软件转换为在线软件

Java 不会使用 Apache commons exec 执行 shellscript 中的所有命令

java.lang.NoClassDefFoundError : javax/el/ValueExpression in jSTL using Spring-MVC

java - 与 POJO 相比,使用 EJB 有什么优势?

mysql - 还需要用 MySQL 5 在 J2EE 6 中编写连接池类吗?

java - 25个类对象的数组

java - java中数组中的重复数字给出错误的输出

java - Vaadin 中的多线程刷新 UI

java - ServletContext 是 Servlet 之间共享资源的首选方式吗?