【问题标题】:How to caputure HeapDumpOnOutOfMemoryError如何捕获 HeapDumpOnOutOfMemoryError
【发布时间】:2017-08-19 16:26:58
【问题描述】:

我已经在 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/"

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

【问题讨论】:

  • 你想测试 OOM 上抛出的异常吗?如果是这种情况,那么我认为您必须以某种方式让 VM 获得 OOM。 heapDump 将发生并将其故事写入您指定的位置。您还可以通过指定 -XX:ErrorFile=whatever.file 来指定有关 OOM 的文件名

标签: java jvm tomcat7


【解决方案1】:

你可以像下面这样使用它:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=

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

jmap -J-d64 -dump:format=b,file=

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

jhat“转储文件的路径”。

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

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-28
      • 1970-01-01
      • 2013-09-19
      • 2012-03-27
      • 2021-12-11
      相关资源
      最近更新 更多