巨大的堆转储(11GB) - Jhat失败和Eclipse MAT需要帮助

问题描述:

我们在EA中遇到内存错误,我们使用-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/some/dir在OOM时转储堆。巨大的堆转储(11GB) - Jhat失败和Eclipse MAT需要帮助

我们有一个12GB的堆内存和256MB的perm gen。

堆转储是在我们运行我们的应用程序并且其大小为11.5GB的Linux框中生成的。我们无权将其下载到我们的本地。

当我们试图用JHAT它抛出OOM来分析11GB堆转储。

我们从我们的Linux CLI尝试了以下命令。

jhat java_pid1491.hprof 
jhat -J-Xmx16g -XX:-UseBiasedLocking java_pid1491.hprof 
jhat -J-d64 -J-Xmx16g -J-XX:-UseBiasedLocking java_pid1491.hprof#1 

对于所有选项,在读取转储几分钟(> 30分钟)后抛出OOM异常。

我们用Google搜索了一下,发现MAT作为一个强大的堆转储分析,但不是一种方式,LINUX使用它。

任何建议会有更大的帮助。谢谢。

修改:

了MAT安装在Linux的x86_64的机器,但在执行时./MemoryAnalyzer

(.:17319): GLib-GObject-WARNING **: invalid (NULL) pointer instance 
(.:17319): GLib-GObject-CRITICAL **: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed 
(.:17319): Gtk-CRITICAL **: gtk_settings_get_for_screen: assertion `GDK_IS_SCREEN (screen)' failed 
(.:17319): GLib-GObject-CRITICAL **: g_object_get: assertion `G_IS_OBJECT (object)' failed 
(.:17319): Gtk-WARNING **: Screen for GtkWindow not set; you must always set 
a screen for a GtkWindow before using the window 
(.:17319): Gdk-CRITICAL **: gdk_pango_context_get_for_screen: assertion `GDK_IS_SCREEN (screen)' failed 
(.:17319): Pango-CRITICAL **: pango_context_set_font_description: assertion `context != NULL' failed 
(.:17319): Pango-CRITICAL **: pango_context_set_base_dir: assertion `context != NULL' failed 
(.:17319): Pango-CRITICAL **: pango_context_set_language: assertion `context != NULL' failed 
(.:17319): Pango-CRITICAL **: pango_layout_new: assertion `context != NULL' failed 
(.:17319): Pango-CRITICAL **: pango_layout_set_text: assertion `layout != NULL' failed 
(.:17319): Pango-CRITICAL **: pango_layout_set_attributes: assertion `layout != NULL' failed 
(.:17319): Pango-CRITICAL **: pango_layout_set_alignment: assertion `layout != NULL' failed 
(.:17319): Pango-CRITICAL **: pango_layout_set_ellipsize: assertion `PANGO_IS_LAYOUT (layout)' failed 
(.:17319): Pango-CRITICAL **: pango_layout_set_single_paragraph_mode: assertion `PANGO_IS_LAYOUT (layout)' failed 
(.:17319): Pango-CRITICAL **: pango_layout_set_width: assertion `layout != NULL' failed 
(.:17319): Pango-CRITICAL **: pango_layout_get_extents: assertion `layout != NULL' failed 
(.:17319): Gtk-CRITICAL **: gtk_icon_theme_get_for_screen: assertion `GDK_IS_SCREEN (screen)' failed 
(.:17319): Gtk-CRITICAL **: gtk_settings_get_for_screen: assertion `GDK_IS_SCREEN (screen)' failed 
(.:17319): Gtk-CRITICAL **: gtk_icon_size_lookup_for_settings: assertion `GTK_IS_SETTINGS (settings)' failed 
(.:17319): Gtk-WARNING **: Invalid icon size 6 
(.:17319): Gtk-CRITICAL **: gtk_icon_theme_load_icon: assertion `GTK_IS_ICON_THEME (icon_theme)' failed 
Segmentation fault 

我试图./ParseHeapDump.sh ../java_pid1491.hprof这一点,得到了下面的错误得到了下面的错误,

Caused by: java.lang.NoClassDefFoundError: com/ibm/dtfj/image/CorruptDataException 
     at org.eclipse.mat.dtfj.InitDTFJ.stop(InitDTFJ.java:70) 
+1

第一误差是很正常的,因为没有可用的显示,你是在SSH。 对于第二个错误,也许你可以找到答案[这里](http://www.eclipse.org/forums/index.php?t=msg&goto=652942&S=237ea1900130ae87306793cd0f38015f) – Grooveek 2011-05-18 09:44:14

+2

SAP捐赠MAT代码Eclipse基金会,并在缺少dtfj的情况下提供[link](http://wiki.eclipse.org/index.php/MemoryAnalyzer#System_Dumps_and_Heap_Dumps_from_IBM_Virtual_Machines)。也许如果你安装它... – Grooveek 2011-05-18 09:50:41

+0

我已经检查了第一[link](http://www.eclipse.org/forums/index.php?t=msg&goto=652942&S=237ea1900130ae87306793cd0f38015f)你给。我用可用的特征罐替换了给定的罐子。它使整个MAT损坏。第二[链接](http://wiki.eclipse.org/index.php/MemoryAnalyzer#System_Dumps_and_Heap_Dumps_from_IBM_Virtual_Machines),我还没有测试,并会回复你。谢谢。 – raksja 2011-05-18 10:47:06

我昨天在Linux上使用MAT .... 检查了亲每个版本here

+0

@Grooveek - 我正在下载文件..是否有任何文件设置在Linux中..请分享,如果你有任何。谢谢。 – raksja 2011-05-17 09:16:00

+1

这是绝对简单的...只需cd安装目录并执行'./ MemoryAnalyzer'。然后转到'File'和'parse [或load]堆转储' – Grooveek 2011-05-17 09:25:10

+0

我无法使用'./ MemoryAnalyzer'执行,但我使用'./ParseHeapDump.sh ../java_pid1491.hprof'解析文件。一切都按预期工作(解析,扫描,提取,重新索引,写入),但过了一段时间它会抛出java.lang.NoClassDefFoundError:com/ibm/dtfj/image/CorruptDataException。我找不到任何解决方法。当我试图为我的Sun JVM运行它时,为什么它要求提供IBM的工具类。请帮助我。 – raksja 2011-05-17 11:35:30

我们在过去使用Netbeans分析OOM错误方面取得了成功。它似乎应对了Eclipse和JHAT无法做到的地方。

忘记与jHat,你需要比RAM 100Gybte更多解析这个转储,它会永远需要,这将是很难找到的东西。 我刚刚在SUSE 11机器上安装了MAT。完美无缺地工作。 您可以确保MAT使用正确的JVM吗?我们不确定我们是否用SUN/SAP JVM来测试它。

问候, 马库斯(kohlerm