我们的 EA 出现内存错误,我们使用了 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/some/dir 在 OOM 时转储堆。

我们的堆内存为 12GB,永久代内存为 256MB。

堆转储是在运行应用程序的 Linux 机器中生成的,其大小为 11.5GB。我们没有权限将其下载到本地。

当我们尝试使用以下方法分析 11GB 堆转储时 杰哈特 它抛出了 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 异常。

我们用谷歌搜索并发现 作为一个强大的堆转储分析器,但不是在 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)
有帮助吗?

解决方案

我昨天在 Linux 上使用 MAT......查看正确的版本 这里

其他提示

忘记 Jhat,您将需要超过 100Gybte 的 RAM 来解析此转储,这将花费很长时间并且很难找到东西。我最近刚刚在 SUSE 11 机器上安装了 MAT。工作完美。您能否确保 MAT 使用正确的 JVM?不确定我们是否使用 SUN/SAP JVM 之外的其他东西来测试它。

问候,马克斯(科勒姆)

我们过去已经成功地使用 Netbeans 来分析 OOM 错误。它似乎可以解决 Eclipse 和 JHAT 无法解决的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top