java - 如何捕获HeapDumpOnOutOfMemoryError

标签 java jvm tomcat7

我在 tomcat 7.0.55 中部署了一个应用程序进行测试。我想捕获是否发生“HeapDumpOnOutOfMemoryError”。以下是我的 JVM 参数。

JAVA_OPTS="-server -Xms512M -Xmx2048M -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ThreadStackSize=512 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/apps/dumps/"

我在该目录下没有看到任何文件。它是在目录下创建一个文件还是我必须手动创建一个文件来附加?

最佳答案

您可以按如下方式使用它:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=

如果您知道进程 ID,您还可以使用 jmap 手动生成内存映射:

jmap -J-d64 -dump:format=b,文件=

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

jhat“转储文件的路径”。

默认情况下,堆转储是在虚拟机工作目录中名为 java_pid.hprof 的文件中创建的,如上例所示。您可以使用 -XX:HeapDumpPath= 选项指定备用文件名或目录。例如 -XX:HeapDumpPath=/disk2/dumps 将导致在/disk2/dumps 目录中生成堆转储。

关于java - 如何捕获HeapDumpOnOutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43038355/

相关文章:

java - 如何在 tomcat 7 上重新部署 hibernate-c3p0 项目而不会出现奇怪的 c3p0 错误

c# - CIL 和 JVM C#​​ 和 Java 中的小端到大端

java - 使用 selenium 测试用户输入

java - 如何编写java程序只打印字符串中的重复字符?

java - 对于垃圾收集来说,如果我们将对象设为 null 并在方法结束时使用后清除收集,这是个好主意

java - 在 Java 中,如何在类加载或卸载时运行静态方法?

java - 运行在两个不同 JVM 上的两个应用程序如何交互?

java - 删除@ManyToMany关系中的引用方实体: JPA

java - "source"元素中的 "Context"属性在 Tomcat 的 server.xml 配置中表示什么?

tomcat - 在 tomcat 中的 .war 文件之间自动共享相同的 .jar 文件