Java

Java – スレッドダンプの取り方 その2 / Linux だと java プロセスがいっぱい!?

その1 / スレッドダンプの取り方
→その2 / Linux だと java プロセスがいっぱい!?
その3 / Windows サービスとして登録している場合は?
その4 / WebLogic Server とスレッドダンプ
スレッドダンプの読み方 その1 – VM 内部スレッドと main スレッド

前回説明した通り、スレッドダンプを取るのは簡単です。解析にはちょっと慣れがいるのですが・・。

さて、運用環境でフリーズしたぞ!ってときにスレッドダンプを取ろうと思うと困ることがあります。一つは Linux 環境でやたらとプロセスが表示されてしまい、どのプロセスIDを指定すれば良いかわからない場合です。
一部の Linux ではスレッドの実装の違い(※)から、ps コマンドを実行した際、Java アプリケーションが一つしか起動していなくても大量に Java プロセスが表示されてしまいます。
その場合は pstree コマンドで一番親となるプロセス(一番左上に表示されるもの) の PID を確認して kill コマンドを実行します。
$ pstree -p | grep java

例)
$ pstree -p | grep java
|-java(344)---java(347)---java(348)
| |-java(349)
| |-java(350)
:
:
$ kill -3 344

※ Linux Threads というスレッドライブラリを使っているカーネルの場合こうなります。NPTL(Native POSIX Thread Library) と呼ばれる新しいスレッド実装では他の Unix 系 OS と同様、Java プロセス一つに付き一つだけ表示されます。