我在 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/