如何分析JVM崩溃时生成的大型核心转储

时间:2016-08-17 02:09:53

标签: java core

我的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$1.construct(FileTask.java:1368)
at com.ibm.jinwoo.thread.ThreadHandler$1.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工具可读?

2 个答案:

答案 0 :(得分:1)

Eclipse MAT tool取得了巨大的成功。您还可以通过更改其安装文件夹中的 .ini 文件来调整其堆,就像在Eclipse中一样。但是在加载堆转储之前,请确保PC上有足够的RAM可用。

答案 1 :(得分:0)

似乎这个核心文件不适用于Java相关工具,如Eclipse MAT工具或IBM Thread and Monitor Dump Analyzer for Java。核心文件的工具是gdbpmappstack。我以为我可以调试应用程序崩溃JVM的原因,但核心文件似乎没有关于应用程序级别事情的信息。