Javaソフトウェアの使用中、奇妙な問題が不可解に発生することがあります。これらの問題は、多くの場合、ログ情報を使用して見つけることができません。現時点では、プロセス内のスレッドのスタックコール関係をチェックして、問題を分析する必要があります。
たとえば、操作を行っている場合、複数の警告ボックスが不可解にポップアップ表示されます。その一部は正常で、一部は正常です。これらのエラー警告メッセージの場合、場所にエラーポップアップボックスがあるコードをどのように見つける必要がありますか?ポップアップボックスの後にソフトウェアのさまざまなスレッドを表示し、どのスレッドが問題を引き起こしているかを確認する必要があります。しかし、環境、時間、その他の問題のために、IDEを使用してデバッグできない場合があります。 Toolソフトウェアを介してメモリスナップショットのみを使用して、メモリ情報を分析することができます。
今日は、一般的に使用されるツール、 JStackを紹介します
JSTackはJDKに付属するツールであり、JVMパフォーマンスチューニングで非常に高い外観レートを持つソフトウェアでもあります。したがって、それを習得することは非常に必要です。
JSTackは、JVMの時刻の現在のポイントのスレッドスナップショットを生成できます。
スレッドスナップショットは、現在のJVMの各スレッドが実行しているメソッドスタックのコレクションです。スレッドスナップショットを生成する主な理由:
1.外部リソースを要求することによって引き起こされるスレッド間のデッドロック、デッドループ、長期待機など、スレッドスナップショットを介したスレッドの長期的な一時停止の理由。
2。現在の実行方法のコール関係のスレッドスナップショット分析を介して例外情報のソースを決定します。
使用は非常に簡単です:
(PS:前提は、JSTACKを備えたJDKをすでに持っていることです。環境変数を設定するのが最善です。)
ステップ1:Windowsタスクマネージャーを介してプロセスのPIDを表示
ここでは、PIDとは何かについて簡単に説明します。PIDは各プロセスのアイデンティティです。これは、ソフトウェアの開始後にプロセスのIDを識別するためにオペレーティングシステムによって割り当てられたユニークなIDです。
示されているように
[プロセス]タブの下で、[列]を[列を選択します。列を選択します
PIDを確認して確認してください
[アプリケーション]タブに切り替えて、メモリをスナップショットするプログラムを選択します。選択した画像はAndroid Studioです。右クリックしてプロセスに移動します。
ここでは、Android Studioの対応するPIDが9952であることがわかります
2番目のステップは、コマンドラインを開き、jstackプログラムを実行することです
環境変数が正常に追加されていない場合、JSTackパスでのみ実行できることに注意してください。そうしないと、オペレーティングシステムはそれを認識しません。
図に示すように、ここには一般に2つの動作パラメーターがあり、メモリスナップショットを撮るために使用されます。
それらの意味は次のとおりです。
-l Longリストに追加のロック情報が印刷されます。デッドロックが発生したら、JSTack -L PIDを使用して、ロック保持の状況を観察できます
-m混合モード、Javaスタック情報を出力するだけでなく、C/C ++スタック情報(ネイティブメソッドなど)も出力します
私たちは通常、-Lパラメーターを使用してニーズを満たします
フォーマットは次のとおりですjstack -l pid >> 123.txt
PSここに注意>>リダイレクトを意味します。これは、キャプチャされたスナップショットを987.txtに出力することを意味します。 >> 2回のときにスペースを保持するのが最善です
このようにして、コマンドラインパスで987.txtファイルを生成し、同時にこのテキストにメモリスナップショットを書き込みます。
下の図に示すように: