巨大的堆转储 (11GB) - Jhat 失败 & Eclipse MAT 需要帮助
我们的 EA 中出现内存错误,我们使用 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/some/dir
在 OOM 时转储堆。
我们的堆内存为 12GB,永久代内存为 256MB。
堆转储是在运行应用程序的 Linux 机器中生成的,其大小为 11.5GB。我们没有权限将其下载到本地。
当我们尝试使用 分析 11GB 堆转储时JHAT 它引发了 OOM。
我们从 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 中使用它的方法。
任何建议都会有更大的帮助。谢谢。
修改:
在Linux x86_64机器上安装了MAT,但执行时出现以下错误./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)
We got a memory error in our EA and we used -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/some/dir
to dump the heap at the time of OOM.
We had a heap memory of 12GB and perm gen of 256MB.
The heap dump is generated in the Linux box where we have our application running and its size is 11.5GB. We don't have privileges to download it to our local.
When we tried to analyze that 11GB heap dump using JHAT it thrown an OOM.
We tried the following commands from our 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
For all the options its throwing an OOM exception after reading the dump for several minutes(>30 mins).
We googled it and found MAT as a powerful heap dump analyzer, but not a way to use it in LINUX.
Any suggestions would be of greater help. Thanks.
Modified:
Got MAT installed in Linux x86_64 machine but got following error when executed ./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
I tried ./ParseHeapDump.sh ../java_pid1491.hprof
this and got following error,
Caused by: java.lang.NoClassDefFoundError: com/ibm/dtfj/image/CorruptDataException
at org.eclipse.mat.dtfj.InitDTFJ.stop(InitDTFJ.java:70)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我昨天在 Linux 上使用 MAT......
此处查看正确的版本
I was using MAT on Linux yesterday....
check out the proper version here
忘记 Jhat,您将需要超过 100Gybte 的 RAM 来解析此转储,这将花费很长时间并且很难找到东西。
我最近刚刚在 SUSE 11 机器上安装了 MAT。工作完美。
您能否确保 MAT 使用正确的 JVM?不确定我们是否使用 SUN/SAP JVM 之外的其他东西来测试它。
问候,
马库斯 (kohlem)
forget Jhat, you would need more than 100Gybte of RAM to parse this dump, it would take forever and it would be very hard to find something.
I just lately installed MAT on a SUSE 11 machine. worked flawlessly .
Can you please make sure that MAT is using the right JVM? Not sure whether we testet it with anything else then the SUN/SAP JVMs.
Regards,
Markus (kohlerm)
我们过去已经成功地使用 Netbeans 来分析 OOM 错误。它似乎可以解决 Eclipse 和 JHAT 无法解决的问题。
We have had success in the past using Netbeans to analyze OOM errors. It seemed to cope where Eclipse and JHAT couldn't.