Java ヒープ ダンプ

WBOY
リリース: 2024-08-30 15:14:19
オリジナル
863 人が閲覧しました

Java では、ヒープ ダンプにより、特定の時点で Java 仮想マシンのメモリ内に存在するオブジェクト全体のスナップショットが得られます。ヒープ ダンプは、メモリ リークの問題のトラブルシューティングや、さまざまな Java アプリケーションでのメモリ使用量の最適化に役立ちます。アドレス、クラス名、タイプ、別のオブジェクトへの参照など、各インスタンスの詳細がヒープ ダンプに記録されます。ヒープ ダンプには、ポータブル ヒープ ダンプ形式、バイナリ形式、および ASCI テキストのクラシック形式など、2 つの形式があります。以下のセクションでは、ヒープ ダンプを生成するためのさまざまなツールとテクニックを見てみましょう。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

ヒープダンプ形式

  • ポータブル ヒープ ダンプ (PHD) 形式: この形式では、ダンプ ファイルはヘッダー セクションとボディ セクションで構成されます。ダンプ ファイルの本体セクションには、オブジェクト、クラス レコード、または配列に関する詳細が含まれます。ファイル形式を説明するために、原始的な数字が使用されます。
  • クラシック ヒープ ダンプ形式: このダンプ形式は、z/OS を除くほぼすべてのプラットフォームで ASCII テキストで生成され、EBCDIC でエンコードされます。

ヒープダンプが使用される理由とその用途は何ですか?

通常、このヒープ ダンプは、使用している Java アプリケーションが予想以上にメモリを消費しているか、アプリケーションが OutOfMemoryError でクラッシュした場合に使用されます。ヒープ ダンプを分析すると、異常の根本原因を特定するのに役立ちます。これに加えて、ヒープ ダンプを使用して、各クラスのメモリ使用量、各クラス内のオブジェクトの数などの詳細を特定することもできます。さらに、詳細をキャプチャすることができ、個人が使用するメモリの量も把握できます。アプリケーション内に存在するJavaオブジェクトも調べることができます。この情報は、メモリ リークの問題を引き起こす実際のコードを特定するのに役立ちます。

ツールとテクニック

以下に挙げるツールとテクニックは次のとおりです

1. JDK ツール

ヒープ ダンプは、JDK のさまざまなツールを使用してキャプチャできます。これらのツールは、JDK のホーム ディレクトリ内の bin フォルダーで利用できます。この場合、ディレクトリがシステム パスに存在するため、コマンド ラインを使用できます。

jmap

jmap は、実行中の JVM のメモリ統計を出力する、ローカルプロセスだけでなくリモートプロセスでも使用できるツールです。

jmap を使用してヒープ ダンプを生成するには、以下に示すようにダンプ オプションを使用できます。

jmap -dump:[live] , format = b , file=< path of the file > <process id>
ログイン後にコピー
  • live: オプションのパラメータ。これが設定されている場合、アクティブな参照を持つオブジェクトのみが印刷されます
  • format=b: ダンプ ファイルの形式がバイナリであることを示します。
  • file: 作成されたダンプを書き込むことができるファイル
  • PID: Java プロセス ID
  • jcmd

jcmd は、コマンド リクエストを Java 仮想マシンに送信するツールです。さらに、これは Java プロセスが実行されているマシンに存在する必要があります。

ヒープ ダンプを取得するには、以下に示すように、コマンド GC.heap_dump を使用して、出力の PID とファイル パスを指定するだけで済みます。

jcmd < pid > GC.heap_dump < path of the file >
ログイン後にコピー
JVisualVM

JVisualVM は、Java アプリケーションの監視、トラブルシューティング、プロファイリングを可能にする、シンプルで直感的なグラフィカル ユーザー インターフェイスを備えたツールです。これを使用してヒープ ダンプを生成するには、Java プロセスを右クリックし、「ヒープ ダンプ」オプションを選択する必要があります。これが完了すると、ツールはヒープ ダンプを作成し、新しいタブで開きます。

2.ヒープダンプの自動作成

上記のような手動手法を使用する代わりに、コマンドライン オプション HeapDumpOnOutOfMemoryError を使用して、java.lang.OutOfMemoryError がスローされたときにヒープ ダンプを自動的に作成します。

java - XX:+HeapDumpOnOutOfMemoryError
ログイン後にコピー

java_pid.hprof はデフォルトでダンプを保存するファイルであり、アプリケーションが実行されるディレクトリで利用できます。

デフォルトのパスの代わりに、他のファイル パスを使用することもできます。そのためには、以下に示すように HeapDumpPath オプションを使用できます。

java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=< file_path >
ログイン後にコピー

したがって、アプリケーションがこの方法を使用してメモリ停止を実行すると、ヒープ ダンプで構成される作成されたファイルでログを確認できます。

3. JMX

ここでは、2 つのパラメーターを許可する dumpHeap テクニックを生成する HotSpotDiagnostic MBean が使用されています。

それらは次のとおりです:

outputFile: 作成されたダンプのファイル パスです。ファイルの拡張子が hprof であることを確認してください。

live。jmap のものと似ています。これが設定されている場合、アクティブな参照を持つオブジェクトのみが印刷されます

ヒープ ダンプをキャプチャするためにこのメソッドを呼び出す 2 つの異なる手法を見てみましょう。

JConsole

JConsole のような JMX クライアントは、HotSpotDiagnostic MBean を使用する最も簡単な方法です。 JConsole が開かれ、実行中の Java プロセスに接続されている場合は、「MBeans」タブに移動し、com.sun.management の下にある HotSpotDiagnostic を特定します。オペレーションの中に、前に説明した dumpHeap メソッドがあります。 dumpHeap 操作を実行する場合、パラメーター OutputFile および live を p0 および p1 テキスト フィールドとして使用します。

プログラムによる方法

JConsole と同様に、HotSpotDiagnostic MBean は Java コードからプログラムを通じて呼び出すことで使用できます。そのためには、MBeanServer インスタンスがアプリケーションに登録された MBean を取得する必要があります。これが完了したら、HotSpotDiagnosticMXBean のインスタンスが必要になり、そのインスタンスの dumpHeap メソッドを呼び出す必要があります。

4. IBM 管理コンソール

使用しているアプリケーションが IBM Websphere Application Server 上で実行されていると仮定します。管理コンソールはヒープを生成できます。まず、管理コンソールのナビゲーションペインで、「トラブルシューティング」を選択し、「Java ダンプとコア」を選択します。これが完了したら、ヒープ ダンプを作成する必要があるサーバーのサーバー名を選択します。その後、「ヒープ ダンプ」をクリックして、上記のサーバーのヒープ ダンプを作成します。 wsadmin はヒープ ダンプの作成にも使用できます。

以上がJava ヒープ ダンプの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート