実行中の JBoss インスタンスからスレッド ダンプを生成して分析するにはどうすればよいですか?
7 に答える
もう少し使いやすい JBoss 固有の方法があります。
http://community.jboss.org/wiki/GenerateAThreadDumpWithTheJMXConsole
これは、ホスト マシンに直接アクセスできない場合 ("kill" が必要) に特に便利です。
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 スレッドは、モニター ロックの待機中に中断されました」
2 つのオプション:
オプション 1 JMX コンソールを使用してスレッド ダンプを生成する
スレッド ダンプを生成するには:
- JMXConsole を開きます (例:
http://localhost:8080
) jboss.system:type=ServerInfo
mbeanに移動します (ヒント:おそらく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
ここにあるスタックトレース アプリも便利です。特に Windows マシンでは、Java アプリがコマンド ラインから起動されていない場合に役立ちます。
Thread.getAllStackTraces()
(Java 1.5 以降)
JBossがロックしすぎて、jmx-concoleでさえ応答しない場合があります。このような場合は、Linuxではkill -3を使用し、WindowsではSendSignalを使用します。
https://community.jboss.org/wiki/ThreadDumpJSPページには、JMX なしで使用できるスタンドアロンの自己完結型の threaddump.war があります。