Takuya71 のぶろぐ

外資系ソフトウェア会社で働いてます、認定スクラムマスター

Tomcat の Thread Dump を取る

Tomcat と書いてますが Java の Thread Dump を取る方法です。

CentOS6.3 には yum で tomcat6 をインストールしています。
この tomcat の Thread dump を取ってみます。

Java の Thread dump 自体は kill -3 pid を実行するととれます。

# kill -3 <pid>

その為 まず tomcat6 の java の pid を確認します。 pid の確認は 親子関係がわかりやすいので pstree コマンドと使って確認しました。

# pstree -p

   ├─java(19334)─┬─{java}(19337)
        │             ├─{java}(19339)
        │             ├─{java}(19340)
        │             ├─{java}(19342)
        │             ├─{java}(19343)
        │             ├─{java}(19344)
        │             ├─{java}(19345)
        │             ├─{java}(19346)
        │             ├─{java}(19347)
        │             ├─{java}(19348)
....

このように java の親プロセスのPIDは 19334 ということがわかります。 わかったら kill -3 を実行し Thread dump を取得します。

# kill -3 19334

で どこに tomcat の Thread dump が出力されるかというと
標準出力に出力されるので tomcat の場合 $CATALINA_HOME/logs の catalina.out ファイルに出力されます。

Full thread dump Java HotSpot(TM) 64-Bit Server VM (23.7-b01 mixed mode):

"TP-Monitor" daemon prio=10 tid=0x00007fb0545d8000 nid=0x4b9e in Object.wait() [0x00007fb04ce0a000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000000f7077be0> (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)
        at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:565)
        - locked <0x00000000f7077be0> (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)
....