9

発生時にアプリケーションによって作成された大きな(5GB)hprofダンプがありOutOfMemoryErrorます。( XXの使用:HeapDumpOnOutOfMemoryError)。

残念ながら、このエラーが発生したときに収集されたログはありません。これを再作成するには数時間かかります。いくつかのツールがhprofからの例外スタックトレースまたはすべてのスレッドスタックなどを表示できるかどうかを期待していました。

現在MATを使用していますが、スレッド情報を取得する方法がわかりませんでした。どのツールを使用できますか?

(OOMが発生したときのhprofファイルにスレッド/呼び出しの場所に関する情報があるかどうかはわかりません)。

(通常の場合にスレッドダンプを取得する方法を知っています。ここでの問題は、すでに発生したイベントです。私が持っているのはhprofダンプだけです。)

4

7 に答える 7

12

自分の質問に答える。クレジットは@RCに送られます

  1. visualvmを使用してダンプを開きます。しばらく時間がかかります。
  2. 「ヒープダンプのスレッド」をクリックします

heapdumpにスレッドがあるビジュアルVM

于 2012-09-12T06:53:37.633 に答える
8

MATはスレッドを直接表示できるようになりました(おそらく、質問が行われたためにこれが追加されました)。

スレッドの概要

ヒープダンプ内のすべてのスレッドの概要を取得するには、次の画像に示すように、ツールバーの[スレッドの概要]ボタンを使用します。または、[クエリブラウザ]>[スレッドの概要とスタック]クエリを使用することもできます。

ツールバーアイコンのスクリーンショット

于 2016-12-20T13:44:07.317 に答える
0

ヒープダンプにはGCルート以外のスレッド情報は含まれていないと思います。スレッド関連の情報が必要な場合は、スレッドダンプも取得する必要があります。

于 2012-09-12T05:07:52.120 に答える
0

Eclipse MATを使用すると、リークサスペクトレポートでサスペクトスレッドを確認できます。アプリケーション名前空間のクラスとその行番号を探して、ヒープ内で占有しているメモリの量を見つけます。これにより、リークのあるクラスのヒントが得られます。

于 2012-09-12T05:26:03.777 に答える
0

プロセスIDを-3で強制終了して、スレッドダンプを標準出力にすることができます。これはJavaプロセスを強制終了しないので、何度でも実行できます。

RCが述べたように、visualVMは、クラスタイプ、あらゆる種類のグラフおよびプロファイリングツールごとのオブジェクト数を提供する優れたツールです。

于 2012-09-12T05:27:54.290 に答える
0

visualvmを使用します。

パーマヒープスペースが超過したときにグラフを分析してみてください...メモリサンプルもチェックして、スナップショットを保存する必要があります。

スレッドスタックを分析すると、問題を絞り込むのに役立ちます。

于 2012-09-12T06:40:29.943 に答える
-1

必要なオプションをオンにし、必要な+オプションをオフにするには-

ドキュメントについて混乱しているのは、すでに設定されている設定を「明確」にするためのデフォルト設定が表示されていることです。+が付いているものはデフォルトでオンになっており、-が付いているものはデフォルトでオフになっています。これは、ドキュメントから+または-オプションのいずれかをコピーした場合、それらは何もしないことを意味します(デフォルトが時間の経過とともに変更された場合を除く)

-XX:-HeapDumpOnOutOfMemoryErrorは、デフォルトであるヒープダンプをオフにします。

-XX:+ HeapDumpOnOutOfMemoryErrorは、ヒープダンプをオンにします。

于 2012-09-12T07:06:24.070 に答える