実行中の JBoss インスタンスからスレッド ダンプを生成および分析するにはどうすればよいですか?
-
09-06-2019 - |
質問
実行中の JBoss インスタンスからスレッド ダンプを生成および分析するにはどうすればよいですか?
解決
もう少しユーザーフレンドリーな JBoss 固有のメソッドがあります。
http://community.jboss.org/wiki/GenerateAThreadDumpWithTheJMXConsole
これは、ホスト マシンに直接アクセスできない場合 (「強制終了」にはアクセスが必要です) に特に便利です。
他のヒント
http://java.sun.com/developer/technicalArticles/Programming/Stacktrace/
...
「UNIX プラットフォームでは、kill コマンドを使用してプログラムにシグナルを送信できます。これは終了信号であり、JVM によって処理されます。たとえば、Solaris では、コマンド kill -QUIT process_id を使用できます。process_id は Java プログラムのプロセス番号です。
あるいは、Java プログラムが開始されたウィンドウにキー シーケンス <ctrl>\ を入力することもできます。このシグナルを送信すると、JVM 内のシグナル ハンドラーに、JVM 内のスレッドおよびモニターに関するすべての情報を再帰的に出力するよう指示されます。
...
「スレッド状態の決定」
JVM スタック トレースのスナップショットには、さまざまな状態のさまざまなスレッドが表示されます。使用されるキーは次のとおりです。
R 実行中のスレッドまたは実行可能なスレッド
S 吊り糸
CW 条件変数を待機しているスレッド
モニターロックを待機している MW スレッド
MS スレッドはモニター ロックを待機中一時停止されました。」
スタックトレース アプリが見つかりました ここ また、特に Windows マシンで Java アプリがコマンド ラインから起動されない場合に便利です。
Thread.getAllStackTraces() (Java 1.5 以降)
2 つのオプション:
オプション1 JMX コンソールを使用してスレッド ダンプを生成する
スレッド ダンプを生成するには:
- JMXConsole を開きます (例:
http://localhost:8080
) - 案内する
jboss.system:type=ServerInfo
ムビーン(ヒント: おそらく、CTRL-F を押して、ダイアログ ボックスに type=ServerInfo と入力するだけです)。 - サーバー情報 MBean のリンクをクリックします。
- それが表示されている下部に移動します
listThreadDump
- それをクリックしてスレッドダンプを取得してください
ノート:
Internet Explorer を使用している場合は、次を使用する必要があります File > Save As
データをテキスト エディタにコピーする代わりに出力を保存します。何らかの理由で、Internet Explorer からテキストをコピーすると改行がコピーされず、すべての出力が 1 行になってしまいます。
オプション 2 Twiddle を使用してスレッド ダンプを生成する
あるいは、twiddle を使用して実行することもできます。 listThreadDump()
メソッドを使用し、返された HTML をファイルに直接パイプ処理します。次のコマンドラインを使用します。
<JBOSS_HOME>/bin/twiddle invoke "jboss.system:type=ServerInfo" listThreadDump > threads.html
場合によっては、JBoss がロックしすぎて jmx-concole さえ応答しなくなることがあります。このような場合、Linux では kill -3 を使用してください。 信号を送る Windows 上で。
https://community.jboss.org/wiki/ThreadDumpJSP このページには、JMX なしで使用できるスタンドアロンの自己完結型 threaddump.war が含まれています。