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 出力
などなど