jStack定義:
JStackは、Java仮想マシンに付属のスタックトレースツールです。
基本的な紹介:
JSTackは、Java仮想マシンの現在の時刻のスレッドスナップショットを生成するために使用されます。スレッドスナップショットは、現在のJava仮想マシンの各スレッドが実行しているメソッドスタックのコレクションです。スレッドスナップショットを生成する主な目的は、外部リソースを要求することによって引き起こされるスレッド間のデッドロック、デッドループ、長期待機など、長期的なスレッドの一時停止の理由を見つけることです。
スレッドが一時停止すると、各スレッドのコールスタックをjstackを介してチェックすることができ、バックグラウンドで無反応のスレッドが何をしているのか、どのリソースを待っているかを知ることができます。
コマンド形式:
jstack [option] pid
基本パラメーター:
-fフォース印刷スタック情報 'jstack [-l] pid'が対応していない場合
-lロングリスト。 java.util.concurrentに属する所有可能なシンクロナイザーリストなど、ロックに関する追加情報を印刷します。
-m JavaおよびネイティブC/C ++フレームワークのすべてのスタック情報を印刷します。 -H | - ヘルププリントヘルプ情報
PID JavaプロセスID印刷する必要がある構成情報、JPSツールを使用してクエリすることができます
場合
c:/users/administrator> jstack 5516fullスレッドダンプJavaホットスポット(TM)64ビットサーバーVM(24.79-B02混合モード): "DestroyJavavm" PRIO = 6 TID = 0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 「スレッド1」prio = 6 tid = 0x00000000000cb13800 nid = 0x19acモニターエントリを待っている[0x0000000000d67f000] java.lang.thread.state:thread.deadlockdemo $ 2.run(deadlockdemo.java:35 (java.lang.string)-locked <0x00000007d5a9b8>(java.lang.string)at java.lang.thread.run(unknown -0 "prio = 6 tid = 0x000000000cb0e800 nid = 0x6bc wahing bowwhaing waiting [0x000000000D48F000] java.lang.thread.state:swreet.deadlockdemo $ 1.run(deadlockdemo.java:21)でブロックされた(オブジェクトモニター)$ 1.run(deadlockdemo.java:21) - <0x00000007d5a9beb8>(a java.lang.string) - ロック<0x0000000007d5a9be88> java.lang.thread.run(不明なソース)
ここではデッドロックコードが実行され、プログラム内の両方のスレッドが相手がロックをリリースするのを待ち、プログラムをデッドロックします。
このコードから、Deadlockdemo.classの35行目と21行目がブロックされていることが明確にわかります。その後、この機能を最適化する必要があります。
PS:実際の操作では、ダンプ情報は多くの場合、問題を確認するのに十分ではありません。 3つのダンプ情報を生成することをお勧めします。各ダンプが同じ問題を指している場合、問題の典型性を決定します。
要約します
上記は、この記事のJSTACKとスレッドダンプインスタンスの分析に関するものです。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!