sarコマンドでディスクIOを見る
sar -Aで取得したシステムの利用状況の中で、ディスクIOを示すものは下記の記述部分。
17:57:57 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 17:58:07 dev8-0 8.78 0.00 134.13 15.27 0.01 0.73 0.73 0.64 17:58:07 dev8-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:58:07 dev8-2 8.78 0.00 134.13 15.27 0.01 0.73 0.73 0.64 17:58:07 dev8-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:58:07 dev8-17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:58:07 dev8-32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:58:07 dev8-33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:58:07 dev8-48 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:58:07 dev8-49 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:58:07 dev253-0 16.77 0.00 134.13 8.00 0.01 0.79 0.38 0.64 17:58:07 dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 17:58:07 dev9-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
デバイス毎のReadやWriteの時間がわかる。
ただ、このままだと、どのデバイスが何か不明。
devX-Yと書かれているXとYの数値はデバイスのメジャー番号とマイナー番号を示している。
デバイスのメジャー番号とマイナー番号を確認する方法は下記。
$ ls -l /dev/sd* brw-r----- 1 root disk 8, 0 12月 6 18:42 /dev/sda brw-r----- 1 root disk 8, 1 12月 6 18:42 /dev/sda1 brw-r----- 1 root disk 8, 2 12月 6 18:42 /dev/sda2 brw-r----- 1 root disk 8, 16 12月 6 18:42 /dev/sdb brw-r----- 1 root disk 8, 17 12月 6 18:42 /dev/sdb1 brw-r----- 1 root disk 8, 32 12月 6 18:42 /dev/sdc brw-r----- 1 root disk 8, 33 12月 6 18:42 /dev/sdc1 brw-r----- 1 root disk 8, 48 12月 6 18:42 /dev/sdd brw-r----- 1 root disk 8, 49 12月 6 18:42 /dev/sdd1
ここでdiskの右側の数値がメジャー番号、「,」の右側の数値がマイナー番号。
ちなみにソフトウェアRAIDを組んでたり、KVMでディスクパーティションを作成していた場合にも同様に下記のようにして確認可能。
(※環境によってデバイスファイル名は異なるので注意)
$ df -h $ ls -l /dev/md* brw-r----- 1 root disk 9, 0 12月 6 18:42 /dev/md0 ←RAIDデバイス $ ls -l /dev/mapper/* brw-rw---- 1 root disk 253, 0 12月 6 18:42 /dev/mapper/VolGroup00-LogVol00 brw-rw---- 1 root disk 253, 1 12月 6 18:42 /dev/mapper/VolGroup00-LogVol01 crw------- 1 root root 10, 63 12月 6 18:42 /dev/mapper/control
例えばsda1のディスクIOの値を知りたいなら下記をみればいい。
17:58:07 dev8-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
ちなみにデバイスのIOの値だけをとるのであればiostatを用いることで詳細な情報を得ることができ、
デバイスのメジャー番号とマイナー番号からどのデバイスかを判断する必要がない。
# iostat -x Linux 2.6.18-194.26.1.el5 (xxx.yyy.zzz.jp) 2011年01月19日 avg-cpu: %user %nice %system %iowait %steal %idle 9.04 0.03 0.88 0.25 0.00 89.80 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 1.08 98.41 2.57 3.76 455.63 817.48 201.11 0.66 103.80 2.21 1.40 sda1 0.00 0.00 0.00 0.00 0.00 0.00 14.65 0.00 6.72 6.61 0.00 sda2 1.08 98.41 2.57 3.76 455.63 817.48 201.11 0.66 103.80 2.21 1.40 sdb 377.30 1.54 7.77 0.15 3080.55 13.57 390.69 0.02 2.96 1.41 1.12 sdb1 377.30 1.54 7.77 0.15 3080.55 13.57 390.69 0.02 2.96 1.41 1.12 sdc 379.67 1.55 5.39 0.15 3080.55 13.58 558.33 0.03 5.57 2.78 1.54 sdc1 379.67 1.55 5.39 0.15 3080.55 13.58 558.33 0.03 5.57 2.78 1.54 sdd 380.03 1.55 5.04 0.15 3080.58 13.57 596.20 0.03 5.82 2.88 1.49 sdd1 380.03 1.55 5.04 0.15 3080.58 13.57 596.20 0.03 5.82 2.88 1.49 dm-0 0.00 0.00 3.65 102.18 455.63 817.48 12.03 0.80 7.54 0.13 1.40 dm-1 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 109.03 21.86 0.00 md0 0.00 0.00 0.11 2.64 14.52 21.09 12.97 0.00 0.00 0.00 0.00
あとはkSarとかにこの結果を投入すれば綺麗にグラフ化してくれます。
kSarでグラフ化した際に表示されるデバイス名はdevXX-YYの形式ですが、
devXX-YYのデバイス名と実際のデバイス名の対応の設定を手動で実施することができるので、
kSarでグラフ化した後にデバイス名登録をするといいかと思います。
「Options」→「DiskName」で設定変更することが可能です。
sarで取れる値の説明
tps : 1秒間のI/Oリクエスト数(転送回数)
rd_sec(rsec)/s : 1秒間の読み込みセクタ数(1セクタ512バイト)
wr_sec(wsec)/s : 1秒間の書き込みセクタ数(1セクタ512バイト)
avgrq-sz : デバイスへのIOリクエストの平均セクタサイズ
avgqu-sz : デバイスへのIOリクエストの待ち行列の平均セクタサイズ
await : デバイスへのIOリクエストの平均待ち時間(単位msec)[待ち行列にいる時間+処理時間]
svctm : デバイスへのIOリクエストの平均処理時間(単位msec)
%util : デバイスへのIOリクエスト中のCPU使用率(ここが継続的に100%だとディスク部分でボトルネックになっている可能性が高い)
ディスクのセクタサイズを確認する方法
「fdisk -l」で表示される下記部分を確認
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
上記内容だと512バイトであることがわかる。