psコマンドでスレッドを表示させたり、スレッドごとのCPU使用率を確認する

psコマンドの”-L”オプション


今更なネタかもしれませんが、psコマンドでは通常プロセス単位での表示となりますが、"man ps"を読んでみたところ、"-L"等のオプションをつけることで、スレッドを表示することもできるようです。

スレッド表示

H   スレッドをプロセスのように表示する。
-L   可能ならば LWP と NLWP カラムをつけてスレッドを表示する。
-T   可能ならば SPID カラムをつけてスレッドを表示する。
m   プロセスの後にスレッドを表示する。
-m   プロセスの後にスレッドを表示する。

Man page of PS

では、早速試してみましょうか。

普通に"ps -ef"を実行

$ ps -ef | grep -e mysqld -e PID | grep -v grep
UID        PID  PPID  C STIME TTY          TIME CMD
root      4570     1  0 Dec09 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql     4606  4570 10 Dec09 ?        1-01:24:14 /usr/sbin/mysqld

※ 上記および以降、CMD部分の引数表示は見づらくなったため、省略しています。

-Lオプションを付けて実行

↓のような感じでmysqldがスレッド単位で表示されました。
NLWP(スレッド数)も表示されていますね。

$ ps -efL | grep -e mysqld -e PID | grep -v grep
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
root      4570     1  4570  0    1 Dec09 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql     4606  4570  4606  0   12 Dec09 ?        00:00:02 /usr/sbin/mysqld
mysql     4606  4570  4608  0   12 Dec09 ?        00:00:00 /usr/sbin/mysqld
mysql     4606  4570  4609  0   12 Dec09 ?        00:00:05 /usr/sbin/mysqld
mysql     4606  4570  4610  0   12 Dec09 ?        00:03:37 /usr/sbin/mysqld
mysql     4606  4570  4611  0   12 Dec09 ?        00:15:21 /usr/sbin/mysqld
mysql     4606  4570  4615  0   12 Dec09 ?        00:00:00 /usr/sbin/mysqld
mysql     4606  4570  4616  0   12 Dec09 ?        00:00:03 /usr/sbin/mysqld
mysql     4606  4570  4617  0   12 Dec09 ?        00:17:35 /usr/sbin/mysqld
mysql     4606  4570  4618  0   12 Dec09 ?        01:20:07 /usr/sbin/mysqld
mysql     4606  4570  4619  3   12 Dec09 ?        08:11:25 /usr/sbin/mysqld
mysql     4606  4570  4620  6   12 Dec09 ?        15:15:46 /usr/sbin/mysqld
mysql     4606  4570  4631  0   12 Dec09 ?        00:00:16 /usr/sbin/mysqld

CPU使用率なんかも見たい場合

"ps auxww"などではCPUやメモリの利用状況も表示されますよね。

$ ps auxww | grep -e mysqld -e PID | grep -v grep
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      4570  0.0  0.0  63828  1212 ?        S    Dec09   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     4606 10.2 28.4 7238080 7012620 ?     Sl   Dec09 1524:33 /usr/sbin/mysqld

スレッド単位でCPU使用率も表示させる

ということで、これも"-L"オプションを付けて実行してやることで、↓のようにスレッド単位でのCPU使用率を確認することが出来ます。なるほどねー。

$ ps auxww -L | grep -e mysqld -e PID | grep -v grep
USER       PID   LWP %CPU NLWP %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      4570  4570  0.0    1  0.0  63828  1212 ?        S    Dec09   0:00 /bin/sh /usr/bin/mysqld_safe
mysql     4606  4606  0.0   12 28.4 7238080 7012620 ?     Sl   Dec09   0:02 /usr/sbin/mysqld
mysql     4606  4608  0.0   12 28.4 7238080 7012620 ?     Sl   Dec09   0:00 /usr/sbin/mysqld
mysql     4606  4609  0.0   12 28.4 7238080 7012620 ?     Sl   Dec09   0:05 /usr/sbin/mysqld
mysql     4606  4610  0.0   12 28.4 7238080 7012620 ?     Sl   Dec09   3:37 /usr/sbin/mysqld
mysql     4606  4611  0.1   12 28.4 7238080 7012620 ?     Sl   Dec09  15:21 /usr/sbin/mysqld
mysql     4606  4615  0.0   12 28.4 7238080 7012620 ?     Sl   Dec09   0:00 /usr/sbin/mysqld
mysql     4606  4616  0.0   12 28.4 7238080 7012620 ?     Sl   Dec09   0:03 /usr/sbin/mysqld
mysql     4606  4617  0.1   12 28.4 7238080 7012620 ?     Sl   Dec09  17:35 /usr/sbin/mysqld
mysql     4606  4618  0.5   12 28.4 7238080 7012620 ?     Sl   Dec09  80:08 /usr/sbin/mysqld
mysql     4606  4619  3.3   12 28.4 7238080 7012620 ?     Sl   Dec09 491:33 /usr/sbin/mysqld
mysql     4606  4620  6.1   12 28.4 7238080 7012620 ?     Sl   Dec09 916:02 /usr/sbin/mysqld
mysql     4606  4631  0.0   12 28.4 7238080 7012620 ?     Sl   Dec09   0:16 /usr/sbin/mysqld


ちなみにmanの通りですが、"-L"オプションだけではなく"H"オプションなどでも表示されます。

参考


Linuxサーバ Hacks 2 ―コネクティング、モニタリング、トラブルシューティング

Linuxサーバ Hacks 2 ―コネクティング、モニタリング、トラブルシューティング

  • 作者: Bill von Hagen,Brian K. Jones,菅野良二
  • 出版社/メーカー: オライリー・ジャパン
  • 発売日: 2006/10/24
  • メディア: 単行本(ソフトカバー)
  • 購入: 3人 クリック: 26回
  • この商品を含むブログ (31件) を見る