巨大なヒープ ダンプ (11GB) - Jhat が失敗し、Eclipse MAT に助けが必要でした
-
14-11-2019 - |
質問
EA でメモリ エラーが発生したため、 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/some/dir
OOM 時にヒープをダンプします。
ヒープ メモリは 12 GB、perm gen は 256 MB でした。
ヒープ ダンプは、アプリケーションを実行している 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 が対応できなかった場所にも対応しているようです。