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) ....