如何分析 JVM 崩溃时生成的大型核心转储
How to analyze a large core dump generated when JVM crashes
我的 Web 应用程序使用 Java 有一天崩溃并生成了一个大的核心转储 (5.5GB)。我尝试使用 IBM Thread and Monitor Dump Analyzer for Java 来分析这个核心转储,但是在读取核心转储时,控制台显示:
Exception in thread "Thread-0" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at java.util.Arrays.copyOf(Arrays.java:3332)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:569)
at java.lang.StringBuffer.append(StringBuffer.java:369)
at java.io.BufferedReader.readLine(BufferedReader.java:370)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at com.ibm.jinwoo.thread.FileTask.processThreadDump(FileTask.java:1858)
at com.ibm.jinwoo.thread.FileTask$ActualTask.<init>(FileTask.java:215)
at com.ibm.jinwoo.thread.FileTask.construct(FileTask.java:1368)
at com.ibm.jinwoo.thread.ThreadHandler.run(ThreadHandler.java:31)
at java.lang.Thread.run(Thread.java:745)
似乎核心文件太大,无法使用此工具进行分析。使用选项 -Xmx10g
增加堆大小无效。
用什么工具可以分析这么大的核心文件?
2016-08-17 更新13:07:
我尝试使用 Eclipse MAT 工具,但在尝试读取转储文件时遇到以下错误。
Error opening heap dump 'jvm-core.13074'. Check the error log for further details.
Error opening heap dump 'jvm-core.13074'. Check the error log for further details.
Not a HPROF heap dump (java.io.IOException)
Not a HPROF heap dump
我是否需要进行某种预处理或其他操作以使 Eclipse MAT 工具可读转储文件?
我在 Eclipse MAT tool 方面取得了巨大的成功。您还可以像在 Eclipse 中一样,通过更改其安装文件夹中的 .ini 文件来调整其堆。但在加载堆转储之前,请确保您的 PC 上有足够的可用 RAM。
这个核心文件似乎不适用于 Java 相关工具,例如 Eclipse MAT 工具或 IBM Thread and Monitor Dump Analyzer for Java。核心文件的工具是gdb
或pmap
、pstack
。我以为我可以调试为什么应用程序会导致 JVM 崩溃,但核心文件似乎没有关于应用程序级信息的信息。
我的 Web 应用程序使用 Java 有一天崩溃并生成了一个大的核心转储 (5.5GB)。我尝试使用 IBM Thread and Monitor Dump Analyzer for Java 来分析这个核心转储,但是在读取核心转储时,控制台显示:
Exception in thread "Thread-0" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at java.util.Arrays.copyOf(Arrays.java:3332)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:569)
at java.lang.StringBuffer.append(StringBuffer.java:369)
at java.io.BufferedReader.readLine(BufferedReader.java:370)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at com.ibm.jinwoo.thread.FileTask.processThreadDump(FileTask.java:1858)
at com.ibm.jinwoo.thread.FileTask$ActualTask.<init>(FileTask.java:215)
at com.ibm.jinwoo.thread.FileTask.construct(FileTask.java:1368)
at com.ibm.jinwoo.thread.ThreadHandler.run(ThreadHandler.java:31)
at java.lang.Thread.run(Thread.java:745)
似乎核心文件太大,无法使用此工具进行分析。使用选项 -Xmx10g
增加堆大小无效。
用什么工具可以分析这么大的核心文件?
2016-08-17 更新13:07: 我尝试使用 Eclipse MAT 工具,但在尝试读取转储文件时遇到以下错误。
Error opening heap dump 'jvm-core.13074'. Check the error log for further details.
Error opening heap dump 'jvm-core.13074'. Check the error log for further details.
Not a HPROF heap dump (java.io.IOException)
Not a HPROF heap dump
我是否需要进行某种预处理或其他操作以使 Eclipse MAT 工具可读转储文件?
我在 Eclipse MAT tool 方面取得了巨大的成功。您还可以像在 Eclipse 中一样,通过更改其安装文件夹中的 .ini 文件来调整其堆。但在加载堆转储之前,请确保您的 PC 上有足够的可用 RAM。
这个核心文件似乎不适用于 Java 相关工具,例如 Eclipse MAT 工具或 IBM Thread and Monitor Dump Analyzer for Java。核心文件的工具是gdb
或pmap
、pstack
。我以为我可以调试为什么应用程序会导致 JVM 崩溃,但核心文件似乎没有关于应用程序级信息的信息。