【问题标题】:Huge heap dump (11GB) - Jhat failed & Eclipse MAT needed help巨大的堆转储 (11GB) - Jhat 失败 & Eclipse MAT 需要帮助
【发布时间】:2023-03-29 11:55:01
【问题描述】:

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

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

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

当我们尝试使用 JHAT 分析 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 异常。

我们用谷歌搜索了它,发现 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)

【问题讨论】:

  • 第一个错误很正常,因为在 SSH 中没有可用的 DISPLAY。对于第二个错误,或许你能找到答案here
  • SAP 将 MAT 代码捐赠给 Eclipse 基金会,并在缺少 dtfj 的情况下提供link。也许如果你安装它......
  • 我已经先检查了link你给的。我用可用的功能 jar 替换了给定的 jar。它使整个 MAT 损坏。第二个link,我还没有测试,会回复你。谢谢。

标签: java out-of-memory heap-dump jhat memoryanalyzer


【解决方案1】:

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

【讨论】:

  • @Grooveek - 我正在下载文件.. 有没有在 linux 中设置它的文档.. 如果有的话请分享。谢谢。
  • 这非常简单......只需 cd 安装目录并执行 ./MemoryAnalyzer。然后去Fileparse [or load] heap dump
  • 我无法使用./MemoryAnalyzer 执行,但我使用./ParseHeapDump.sh ../java_pid1491.hprof 来解析文件。一切都按预期工作(解析、扫描、提取、重新索引、写入),但一段时间后它会抛出 java.lang.NoClassDefFoundError: com/ibm/dtfj/image/CorruptDataException。我找不到任何解决方案。为什么当我尝试为我的 Sun JVM 运行 IBM 的工具类时它要求它。请帮助我。
  • 当您尝试执行 MemoryAnalyzer 时会发生什么? MAT 是 IBM 专有工具的后续产品。所以,看到其中包含 IBM 课程,我并不感到惊讶……您正在运行哪个 Linux?
  • 我使用 SSH 在 Linux x86_64 中运行它。发生与 GUI 设置相关的错误。如果您想要完整的错误日志,我也可以发布。有什么线索吗?
【解决方案2】:

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

问候, 马库斯 (kohlerm)

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 2014-06-20
      • 2021-03-26
      • 2014-12-03
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多