このエントリーをはてなブックマークに追加

特定のプロセスが極端にメモリをpidstatはプロセス単位(pid毎)のリソース使用量を測定するツールです。pidstatはsysstatの一部なので、sysstatをインストールする必要があります。

インストール

$ sudo yum install sysstat
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * epel: ftp.iij.ad.jp
 * extras: www.ftp.ne.jp
 * rpmforge: mirror.fairway.ne.jp
 * updates: www.ftp.ne.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package sysstat.x86_64 0:9.0.4-20.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================
 Package       Arch       Version          Repository       Size
========================================================================
Installing:
 sysstat       x86_64     9.0.4-20.el6     base             225 k

Transaction Summary
========================================================================
Install       1 Package(s)

Total download size: 225 k
Installed size: 807 k
Is this ok [y/N]: y
Downloading Packages:
sysstat-9.0.4-20.el6.x86_64.rpm                                                                                                                                                                        | 225 kB     00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : sysstat-9.0.4-20.el6.x86_64                                                                                                                                                                                1/1
  Verifying  : sysstat-9.0.4-20.el6.x86_64                                                                                                                                                                                1/1

Installed:
  sysstat.x86_64 0:9.0.4-20.el6

Complete!

使い方

とりあえず試しに手元のruby on rails開発環境に起動しているwebrickが使っているリソースを見てみます。 webrickはrubyで動いているので以下のコマンドでPIDを調べることができます。

$ ps aux | grep ruby | grep -v grep
dev 14262  0.0 16.6 1503532 169276 pts/2  Sl+  03:29   1:08 /home/dev/.rvm/rubies/ruby-1.9.3-p194/bin/ruby script/rails s

これでpidが14262であることがわかったのでpidstatで確認してみます。 pidは-pオプションで指定します。最後の2と10は2秒間隔で10回表示という意味を表します。

$ pidstat -p 14262 2 10
Linux 2.6.32-279.2.1.el6.x86_64 (c6)    2013年11月17日  _x86_64_        (1 CPU)

23時49分02秒       PID    %usr %system  %guest    %CPU   CPU  Command
23時49分04秒     14262   17.59    1.51    0.00   19.10     0  ruby
23時49分06秒     14262    8.54    8.54    0.00   17.09     0  ruby
23時49分08秒     14262   45.23    5.53    0.00   50.75     0  ruby
23時49分10秒     14262   33.84    7.58    0.00   41.41     0  ruby
23時49分12秒     14262   17.50    6.00    0.00   23.50     0  ruby
23時49分14秒     14262   20.20    3.54    0.00   23.74     0  ruby
23時49分16秒     14262   16.67    7.07    0.00   23.74     0  ruby
23時49分18秒     14262    6.53    0.00    0.00    6.53     0  ruby
23時49分20秒     14262   13.00    4.00    0.00   17.00     0  ruby
23時49分22秒     14262   15.00    6.00    0.00   21.00     0  ruby
平均値:      14262   19.40    4.97    0.00   24.37     -  ruby

指定したプロセスがマルチスレッドで動いてたり、子プロセスを持っていたりする場合は、-tをつけることでそれらも一度で確認できます。

$ pidstat -p 14262 2 5 -t
Linux 2.6.32-279.2.1.el6.x86_64 (c6)    2013年11月17日  _x86_64_        (1 CPU)

23時57分44秒      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
23時57分46秒     14262         -    0.00    0.00    0.00    0.00     0  ruby
23時57分46秒         -     14262    0.00    0.00    0.00    0.00     0  |__ruby
23時57分46秒         -     14264    0.00    0.00    0.00    0.00     0  |__ruby
23時57分46秒         -     14265    0.00    0.00    0.00    0.00     0  |__SignalSender
23時57分46秒         -     14270    0.00    0.00    0.00    0.00     0  |__ruby
23時57分46秒         -     19809    0.00    0.00    0.00    0.00     0  |__ruby
23時57分46秒         -     19810    0.00    0.00    0.00    0.00     0  |__ruby
23時57分46秒         -     19811    0.00    0.00    0.00    0.00     0  |__ruby
23時57分46秒         -     19812    0.00    0.00    0.00    0.00     0  |__ruby
23時57分46秒         -     19813    0.00    0.00    0.00    0.00     0  |__ruby
23時57分46秒         -     19814    0.00    0.00    0.00    0.00     0  |__ruby

23時57分46秒      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
23時57分48秒     14262         -   22.61    4.52    0.00   27.14     0  ruby
23時57分48秒         -     14262    0.00    0.50    0.00    0.50     0  |__ruby
23時57分48秒         -     14264    0.00    0.00    0.00    0.00     0  |__ruby
23時57分48秒         -     14265    0.00    0.00    0.00    0.00     0  |__SignalSender
23時57分48秒         -     14270    0.00    0.00    0.00    0.00     0  |__ruby

23時57分48秒      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
23時57分50秒     14262         -   27.78    7.07    0.00   34.85     0  ruby
23時57分50秒         -     14262    0.51    0.00    0.00    0.51     0  |__ruby
23時57分50秒         -     14264    0.00    0.51    0.00    0.51     0  |__ruby
23時57分50秒         -     14265    0.00    0.00    0.00    0.00     0  |__SignalSender
23時57分50秒         -     14270    0.00    0.00    0.00    0.00     0  |__ruby
23時57分50秒         -     19906    2.02    0.00    0.00    2.02     0  |__ruby

23時57分50秒      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
23時57分52秒     14262         -   35.86   10.61    0.00   46.46     0  ruby
23時57分52秒         -     14262    0.00    0.51    0.00    0.51     0  |__ruby
23時57分52秒         -     14264    0.00    0.00    0.00    0.00     0  |__ruby
23時57分52秒         -     14265    0.00    0.00    0.00    0.00     0  |__SignalSender
23時57分52秒         -     14270    0.00    0.00    0.00    0.00     0  |__ruby
23時57分52秒         -     19975    0.00    0.00    0.00    0.00     0  |__ruby
23時57分52秒         -     19977    0.00    0.00    0.00    0.00     0  |__ruby
23時57分52秒         -     19978    0.00    0.00    0.00    0.00     0  |__ruby
23時57分52秒         -     19979    0.00    0.00    0.00    0.00     0  |__ruby
23時57分52秒         -     19980    0.00    0.00    0.00    0.00     0  |__ruby
23時57分52秒         -     19981    0.00    0.00    0.00    0.00     0  |__ruby

23時57分52秒      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
23時57分54秒     14262         -   25.25    8.59    0.00   33.84     0  ruby
23時57分54秒         -     14262    0.00    0.00    0.00    0.00     0  |__ruby
23時57分54秒         -     14264    0.00    0.00    0.00    0.00     0  |__ruby
23時57分54秒         -     14265    0.00    0.00    0.00    0.00     0  |__SignalSender
23時57分54秒         -     14270    0.00    0.00    0.00    0.00     0  |__ruby
23時57分54秒         -     20049    0.00    0.00    0.00    0.00     0  |__ruby

平均値:       TGID       TID    %usr %system  %guest    %CPU   CPU  Command
平均値:      14262         -   22.26    6.14    0.00   28.40     -  ruby
平均値:          -     14262    0.10    0.20    0.00    0.30     -  |__ruby
平均値:          -     14264    0.00    0.10    0.00    0.10     -  |__ruby
平均値:          -     14265    0.00    0.00    0.00    0.00     -  |__SignalSender
平均値:          -     14270    0.00    0.00    0.00    0.00     -  |__ruby
平均値:          -     20049    0.00    0.00    0.00    0.00     -  |__ruby

pidstatで出力する情報にはいろいろありますが、それぞれオプションをしていすることで表示が可能です。

オプション 意味
u CPU資料状況
w タスクswitchの発生状況
d ディスク使用量

そのほかにもいろいろありますので各ディストリビューションのmanを確認してください。以下は、上記のオプションを選択した状態です。

$ pidstat -p 14262 2 2 -dwu
Linux 2.6.32-279.2.1.el6.x86_64 (c6)    2013年11月18日  _x86_64_        (1 CPU)

00時02分41秒       PID    %usr %system  %guest    %CPU   CPU  Command
00時02分43秒     14262    0.00    0.00    0.00    0.00     0  ruby

00時02分41秒       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
00時02分43秒     14262      0.00      0.00      0.00  ruby

00時02分41秒       PID   cswch/s nvcswch/s  Command
00時02分43秒     14262      0.50      0.00  ruby

00時02分43秒       PID    %usr %system  %guest    %CPU   CPU  Command
00時02分45秒     14262    0.00    0.00    0.00    0.00     0  ruby

00時02分43秒       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
00時02分45秒     14262      0.00      0.00      0.00  ruby

00時02分43秒       PID   cswch/s nvcswch/s  Command
00時02分45秒     14262      0.50      0.00  ruby

平均値:        PID    %usr %system  %guest    %CPU   CPU  Command
平均値:      14262    0.00    0.00    0.00    0.00     -  ruby

平均値:        PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
平均値:      14262      0.00      0.00      0.00  ruby

平均値:        PID   cswch/s nvcswch/s  Command
平均値:      14262      0.50      0.00  ruby

d(ディスクIO)、w(コンテキストスイッチの発生割合)、u(CPU使用率)が表示されますが、とても機械で処理可能なフォーマットではありません。 そこでプログラムなどから利用しやすいようにするために、すべての結果を一行で出力するhオプションがあります。

$ pidstat -p 14262 2 2 -dwuh
Linux 2.6.32-279.2.1.el6.x86_64 (c6)    2013年11月18日  _x86_64_        (1 CPU)

#      Time       PID    %usr %system  %guest    %CPU   CPU   kB_rd/s   kB_wr/s kB_ccwr/s   cswch/s nvcswch/s  Command
 1384700910     14262    0.00    0.00    0.00    0.00     0      0.00      0.00      0.00      0.50      0.00  ruby

#      Time       PID    %usr %system  %guest    %CPU   CPU   kB_rd/s   kB_wr/s kB_ccwr/s   cswch/s nvcswch/s  Command
 1384700912     14262    0.00    0.00    0.00    0.00     0      0.00      0.00      0.00      0.50      0.00  ruby



記事一覧へ