Shammer's Philosophy

My private adversaria

Threadごとの負荷を確認するコマンド

LinuxJavaアプリケーションを動かしていて、どのスレッドがどれだけのCPUリソースを食っているか、というのを調べたいときがある。そのときに使用できるコマンドをメモ。

  • topコマンドでスレッドまで表示させる

topコマンド表示中の対話コマンドで"H"を入力すると「Show threads off」と「Show threads on」が切り替わり、プロセス単位の表示とスレッド単位の表示を切り替えられる。

  • ps -eTo pid,ppid,lwp,user,%cpu,args コマンド

古いOSだとダメかもしれないが、以下のような出力が得られ、スレッドごとのCPU使用率がわかる。

PID PPID LWP USER %CPU COMMAND
22058 22020 22058 oracle 0.0 /bin/sh ./startWebLogic.sh
22081 22058 22081 oracle 1.5 /opt/java/jrmc-3.1.2-1.4.2/bin/java -jrockit -Xms128m -Xmx256m -Dweblogic.Name=M
22081 22058 22082 oracle 0.0 /opt/java/jrmc-3.1.2-1.4.2/bin/java -jrockit -Xms128m -Xmx256m -Dweblogic.Name=M
22081 22058 22083 oracle 0.0 /opt/java/jrmc-3.1.2-1.4.2/bin/java -jrockit -Xms128m -Xmx256m -Dweblogic.Name=M
22081 22058 22084 oracle 0.0 /opt/java/jrmc-3.1.2-1.4.2/bin/java -jrockit -Xms128m -Xmx256m -Dweblogic.Name=M
22081 22058 22085 oracle 0.0 /opt/java/jrmc-3.1.2-1.4.2/bin/java -jrockit -Xms128m -Xmx256m -Dweblogic.Name=M
...

これはWebLogicServerの例。同じタイミングでスレッドダンプを取得し、LWP とスレッドダンプの tid を突き合わせる。
若干取得できる情報も変わるが、ps -elLyfでもよい(古いOSだとダメかも)。