Linux/UNIXでプロセスごとのリソース消費量を確認する

Linux/UNIXで、OS全体ではなく特定のプロセスで使用しているリソースのみを取得したい場合は、主に以下の2通りになるだろう。

1.psコマンドで取得する

psコマンドでは、「u」を付与することでCPUやメモリ使用率について取得することも出来る。
例えば、以下の例では全ユーザで実行している、topコマンドについてCPU・メモリ使用率を出力させている(中身はgrepっぽいので、そのものずばりだけ抽出出来ないけど)。

ps au -C top

[root@localhost ~]# ps au -C top
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     15680  0.0  0.0 115380  2040 pts/0    Ss   16:42   0:00 -bash
root     15759  0.0  0.0 115380  2020 pts/1    Ss   17:27   0:00 -bash
root     15776  0.1  0.0 146136  1928 pts/1    S+   17:27   0:00 top
root     15787  0.0  0.0 139496  1572 pts/0    R+   17:27   0:00 ps au -C top
root     23173  0.0  0.0 110028   816 tty1     Ss+   1月04   0:00 /sbin/agetty --noclear tty1 linux

2.pidstatを用いる

sysstatをインストールしている環境であれば、pidstatを使ってプロセスごとのリソース消費量を調査することも出来る。
もしsysstatが無いようであれば、RHEL系・Debian系であれば以下のようにyum・aptでインストールすることができる。

RHEL系

yum install sysstat

Debian系

apt-get install sysstat

後は、以下のように指定することでvmstatと同じように使うことが出来る。

pidstat -p プロセスID 間隔 カウント数

[root@localhost ~]# ps -ef | grep top
root     15776 15759  0 17:27 pts/1    00:00:00 top
root     15848 15831  0 17:35 pts/2    00:00:00 top
root     15874 15680  0 17:38 pts/0    00:00:00 grep --color=auto top
[root@localhost ~]# pidstat -p 15776 1 10
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain)     2016年01月20日  _x86_64_        (2 CPU)

17時38分40秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
17時38分41秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時38分42秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時38分43秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時38分44秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時38分45秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時38分46秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時38分47秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時38分48秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時38分49秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時38分50秒     0     15776    0.00    0.00    0.00    0.00     1  top
平均値:      0     15776    0.00    0.00    0.00    0.00     -  top

複数のプロセス番号を指定する場合は、「-p」で再度プロセス番号を指定してあげる事が出来る。
また、「-C」で実行されているコマンド名を指定することもできる。

[root@localhost ~]# ps -ef | grep top
root     15776 15759  0 17:27 pts/1    00:00:00 top
root     15848 15831  0 17:35 pts/2    00:00:00 top
root     15884 15680  0 17:40 pts/0    00:00:00 grep --color=auto top
[root@localhost ~]# pidstat -p 15776 -p 15848 1 3
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain)     2016年01月20日  _x86_64_        (2 CPU)

17時40分58秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
17時40分59秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時40分59秒     0     15848    0.00    0.00    0.00    0.00     1  top

17時40分59秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
17時41分00秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時41分00秒     0     15848    0.00    0.00    0.00    0.00     1  top

17時41分00秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
17時41分01秒     0     15776    0.00    0.00    0.00    0.00     1  top
17時41分01秒     0     15848    0.00    0.00    0.00    0.00     1  top

平均値:    UID       PID    %usr %system  %guest    %CPU   CPU  Command
平均値:      0     15776    0.00    0.00    0.00    0.00     -  top
平均値:      0     15848    0.00    0.00    0.00    0.00     -  top
[root@localhost ~]#
[root@localhost ~]# pidstat -C top 5 2
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain)     2016年01月20日  _x86_64_        (2 CPU)

17時41分13秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
17時41分18秒     0     15776    0.20    0.00    0.00    0.20     1  top

17時41分18秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
17時41分23秒     0     15848    0.00    0.20    0.00    0.20     1  top

平均値:    UID       PID    %usr %system  %guest    %CPU   CPU  Command
平均値:      0     15776    0.10    0.00    0.00    0.10     -  top
平均値:      0     15848    0.00    0.10    0.00    0.10     -  top