I/O の分析

I/O の分析

 

(1)disk 観点

 

・/proc/diskstats

 

# cat /proc/diskstats

 

   8       0 sda 20166 8896 551088 81264 6369 32946 314460 361421 0 66908 442683

   8       1 sda1 511 279 4054 291 5 5 20 13 0 287 304

   8       2 sda2 336 31 2936 512 0 0 0 0 0 512 512

   8       3 sda3 19167 8586 542882 80203 6364 32941 314440 361408 0 66448 441609

 

各フィールド情報は Documentation/iostats.txt に記載されている。

http://www.kernel.org/doc/Documentation/iostats.txt

 

参考 URL

http://hagio.org/wiki/index.php/Linux/%E9%9B%91%E8%A8%98

 

 

・iostat コマンド

 

# iostat

Linux 2.6.32-220.el6.x86_64 (named.example.com)         2013年02月12日  _x86_64_        (1 CPU)

 

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           0.39    0.00    0.35    0.40    0.00   98.87

 

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

scd0              0.01         0.07         0.00       1056          0

sda               1.78        36.88        21.38     551248     319604

 

#

# iostat -x

Linux 2.6.32-220.el6.x86_64 (named.example.com)         2013年02月12日  _x86_64_        (1 CPU)

 

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           0.38    0.00    0.35    0.39    0.00   98.87

 

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util

scd0              0.00     0.00    0.01    0.00     0.07     0.00     8.00     0.00   33.48  33.48   0.03

sda               0.59     2.23    1.34    0.43    36.66    21.26    32.66     0.03   16.63   2.53   0.45

 

#

 

※-n オプションで NFS も表示するなど、色々表示できる

 

参考 URL

http://d.hatena.ne.jp/yohei-a/20110711/1310396665

https://blogs.oracle.com/yappri/entry/iostat

 

 

 

(2)プロセス観点

 

・/proc/<PID>/io

 

# cat /proc/1/io

rchar: 35322627

wchar: 56314133

syscr: 31227

syscw: 109106

read_bytes: 114280448

write_bytes: 7798784

cancelled_write_bytes: 454656

#

 

各フィールド情報は参考 URL

 

参考 URL

http://www.drk7.jp/MT/archives/001784.html

 

 

・pidstat コマンド (RHEL6 以降の sysstat パッケージ)

 

I/O 以外にも色々表示できるが、とりあえず、以下は I/O のオプション (d)

※上記の io 含め、/proc 配下の情報をもとに表示するらしいので

  こちらが便利

  ただし、インターバルが無いと、起動時の統計情報となる

  このあたりは XXstat 系のコマンドと同じ

 

# pidstat -d

Linux 2.6.32-220.el6.x86_64 (named.example.com)         2013年02月12日  _x86_64_        (1 CPU)

 

07時33分47秒       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

07時33分47秒         1      7.17      0.49      0.03  init

07時33分47秒       385      0.00      1.59      0.00  jbd2/sda3-8

07時33分47秒       388      0.00      0.08      0.00  flush-8:0

07時33分47秒       469      0.89      0.00      0.00  udevd

07時33分47秒      1100      0.00      0.00      0.00  jbd2/sda1-8

07時33分47秒      1435      0.00      0.02      0.00  auditd

07時33分47秒      1453      0.01      0.00      0.00  portreserve

::

 

-l オプションでコマンドをフルパスに

 

# pidstat -dl

Linux 2.6.32-220.el6.x86_64 (named.example.com)         2013年02月12日  _x86_64_        (1 CPU)

 

07時33分50秒       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

07時33分50秒         1      7.17      0.49      0.03  /sbin/init

07時33分50秒       385      0.00      1.59      0.00  jbd2/sda3-8

07時33分50秒       388      0.00      0.08      0.00  flush-8:0

07時33分50秒       469      0.89      0.00      0.00  /sbin/udevd -d

07時33分50秒      1100      0.00      0.00      0.00  jbd2/sda1-8

07時33分50秒      1435      0.00      0.02      0.00  auditd

07時33分50秒      1453      0.01      0.00      0.00  /sbin/portreserve

07時33分50秒      1460      0.00      0.02      0.00  /sbin/rsyslogd -i /var/run/syslogd.pid -c 4

::

#

 

 

・dstat コマンド

 

PID などは表示されないが、最も I/O が高いプロセスが表示される

 

       --top-bio

              show most expensive block I/O process

 

 

       --top-io

              show most expensive I/O process

 

# dstat -t --top-bio

----system---- ----most-expensive----

  date/time   |  block i/o process

12-02 07:55:19|miniserv.pl6456B 6648B

12-02 07:55:20|

12-02 07:55:21|

12-02 07:55:22|

#

#

# dstat -t --top-io

----system---- ----most-expensive----

  date/time   |     i/o process

12-02 07:55:25|miniserv.pl 165k 2222B

12-02 07:55:26|sshd: root@ 249B  292B

12-02 07:55:27|sshd: root@ 107B  148B

12-02 07:55:28|miniserv.pl 219k    0

12-02 07:55:29|sshd: root@ 100B  148B

 

参考 URL

 

http://d.hatena.ne.jp/sh2/20120507

 

 

※他にも以下に色々 (iotop コマンドなど) 書いてる

http://blog.father.gedow.net/2012/10/23/linux-command-for-trouble/

 

 

おまけ

 

pidstat と dstat でのオプションを適当に確認

 

・pidstat

 

CPU 使用率

 

#

# pidstat

Linux 2.6.32-220.el6.x86_64 (named.example.com)         2013年02月12日  _x86_64_        (1 CPU)

 

07時45分53秒       PID    %usr %system  %guest    %CPU   CPU  Command

07時45分53秒         1    0.00    0.01    0.00    0.01     0  init

07時45分53秒         7    0.00    0.00    0.00    0.00     0  events/0

07時45分53秒        16    0.00    0.00    0.00    0.00     0  kblockd/0

07時45分53秒        20    0.00    0.04    0.00    0.04     0  ata/0

 

 

メモリ関連

# pidstat -r

Linux 2.6.32-220.el6.x86_64 (named.example.com)         2013年02月12日  _x86_64_        (1 CPU)

 

07時43分14秒       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command

07時43分14秒         1      0.16      0.00   19272   1536   0.24  init

07時43分14秒       469      0.13      0.00   11376   1432   0.23  udevd

07時43分14秒      1435      0.01      0.00   27688    836   0.13  auditd

07時43分14秒      1453      0.01      0.00    6212    580   0.09  portreserve

07時43分14秒      1460      0.03      0.00  248748   1476   0.24  rsyslogd

07時43分14秒      1502      0.01      0.00   19024    908   0.14  rpcbind

07時43分14秒      1520      0.03      0.00   23200   1204   0.19  rpc.statd

07時43分14秒      1552      0.01      0.00   27436    552   0.09  rpc.idmapd

07時43分14秒      1573      0.03      0.00   97480   1444   0.23  dbus-daemon

 

 

スレッド関連

 

# pidstat -t

Linux 2.6.32-220.el6.x86_64 (named.example.com)         2013年02月12日  _x86_64_        (1 CPU)

 

07時43分40秒      TGID       TID    %usr %system  %guest    %CPU   CPU  Command

07時43分40秒         1         -    0.00    0.01    0.00    0.01     0  init

07時43分40秒         -         1    0.00    0.01    0.00    0.01     0  |__init

07時43分40秒         -         6    0.00    0.00    0.00    0.00     0  |__watchdog/0

07時43分40秒         7         -    0.00    0.00    0.00    0.00     0  events/0

07時43分40秒         -         7    0.00    0.00    0.00    0.00     0  |__events/0

07時43分40秒         -        13    0.00    0.00    0.00    0.00     0  |__sync_supers

 

 

コンテキストスイッチ関連

 

# pidstat -w

Linux 2.6.32-220.el6.x86_64 (named.example.com)         2013年02月12日  _x86_64_        (1 CPU)

 

07時44分59秒       PID   cswch/s nvcswch/s  Command

07時44分59秒         1      0.05      0.01  init

07時44分59秒         2      0.00      0.00  kthreadd

07時44分59秒         3      0.00      0.00  migration/0

 

 

・dstat

 

-d でディスクの read/write

 

# dstat -d

-dsk/total-

 read  writ

  17k   10k

   0     0

   0     0

   0     0

   0     0

 

-D オプションでディスクを指定

 

# dstat -D sda1

----total-cpu-usage---- --dsk/sda1- -net/total- ---paging-- ---system--

usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw

  0   0  99   0   0   0| 124B    1B|   0     0 |   0     0 |  22    33

  0   0 100   0   0   0|   0     0 |  60B  826B|   0     0 |  19    30

  0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  18    16

  0   0 100   0   0   0|   0     0 | 166B  400B|   0     0 |  29    35

  0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  18    14

  0   1  99   0   0   0|   0     0 |  60B  346B|   0     0 |  21    31

  0   0  99   0   0   1|   0     0 |  60B  346B|   0     0 |  19    14

  0   0 100   0   0   0|   0     0 |  60B  346B|   0     0 |  22    34

 

-r で I/O リクエストの状態

 

# dstat -r

--io/total-

 read  writ

1.21  0.42

   0     0

   0     0

   0     0

 

--output FILENAME で CSV 出力

 

などなど