出力例
$ iostat -x 30 avg-cpu: %user %nice %system %iowait %steal %idle 0.87 0.01 2.53 0.49 0.00 96.11 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.05 16.03 0.36 13.74 5.77 238.22 17.31 0.15 10.39 0.98 1.38 sda1 0.00 0.00 0.00 0.00 0.00 0.00 15.53 0.00 12.81 11.47 0.00 sda2 0.05 16.03 0.36 13.74 5.77 238.22 17.31 0.15 10.39 0.98 1.38 avg-cpu: %user %nice %system %iowait %steal %idle 1.15 0.00 1.73 0.58 0.00 96.53 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sda 0.00 13.70 0.00 11.93 0.00 205.07 17.18 0.17 14.13 1.18 1.40 sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda2 0.00 13.70 0.00 11.93 0.00 205.07 17.18 0.17 14.13 1.18 1.40
カラムの意味
- r/s: 秒間の読み込み回数
- w/s: 秒間の書き込み回数
- avgrq-sz: 平均 I/O サイズ
- avgqu-sz: 平均待ち行列長
- await: レスポンスタイム。I/O を実施していない待ち時間を含む。
- svctm: サービスタイム。1回のI/Oに要する時間 (ミリ秒)。
- %util: 使用率(ビジー率)
IOPS (秒間のI/O回数) = (r/s + w/s) svctm = 1000(ミリ秒) / IOPS %util = IOPS * svctm / 1000 (ミリ秒)
見方
- IOPS(r/s + w/s)が増えて、平均待ち行列長(avgqu-sz)とレスポンスタイム(await)が大きくなっている場合、I/O 回数が増えて待ちが発生していると考えられる。
- 平均 I/O サイズ(avgrq-sz)が変わらないのにサービスタイム(svctm)が大きくなった場合、I/O性能が劣化しており、ストレージに問題があると考えられる。
参考
- 絵で見てわかるOS/ストレージ/ネットワーク~データベースはこう使っている (DB Magazine Selection) P.176
- 続・門外不出のOracle現場ワザ (DB SELECTION) P.77
- iostat コマンドの読み方 | Oracle やっぱり Sun がスキ! Blog
- Yoshinori Matsunobu's blog: iostat: (r/s + w/s) * svctm = %util on Linux
追記:
IO Accounting 機能で I/O 負荷の高いプロセスを特定 - drk7jp
いまどきは、/proc/[pid]/io とか pidstat とか dstat とかあるんですね。
追記(2012/02/08):
ある方に参考になる URL を教えていただいた。これは濃そうだ。