Linux iostatとiotop コマンドでディスク負荷を確認する

スポンサーリンク

LinuxのディスクのI/O状況を確認するには iostat や iotop コマンドで確認することができる。

iostatコマンド

システムが重い状態で、ディスクのIOにボトルネックがあると推測する場合はiostat コマンドでディスクの負荷状況を確認する。iostat に-x オプションで詳細表示されるので大抵はこれで状況がわかる。搭載されているディスク単位で情報が出力される。

# iostat -x
Linux 3.10.0-514.el7.x86_64 (test)    2024年03月25日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          18.08    0.00   24.18    0.43    0.00   57.31

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdb               0.00     0.20   46.71    4.51  9088.01    87.62   358.34     0.11    2.23    2.40    0.42   0.57   2.93
sdc               0.00     0.00    7.16    0.00    53.38     0.00    14.92     0.00    0.09    0.09    0.00   0.08   0.06
sdd               0.00     0.00    7.16    0.00    53.38     0.00    14.92     0.00    0.07    0.07    0.00   0.06   0.04
sda               0.00     0.68  125.58    2.94  4492.43   190.06    72.87     0.04    0.33    0.32    0.94   0.22   2.84
scd0              0.00     0.00    0.31    0.00     1.25     0.00     8.00     0.00    0.09    0.09    0.00   0.09   0.00
項目説明
rrqm/s秒間あたりに読み込みキューに登録され、マージされた読み出し要求数
wrqm/s秒間あたりに読み込みキューに登録され、マージされた書き込み要求数
r/s毎秒何回読み出しを行っているか※r/s と w/s を足し合わせた値が IOPS になる
w/s毎秒何回書き込みを行っているか※r/s と w/s を足し合わせた値が IOPS になる
rkB/s1秒当たりの読み出しセクタ数
wkB/s1秒当たりの書き込みセクタ数
avgrq-sz1回で要求(ReQuest)された平均セクタサイズ
avgqu-szI/Oキュー(QUeue)の長さの平均
await作成された要求が完了するまでの平均時間 レスポンスタイム。I/O を実施していない待ち時間を含む。
r_await作成された読み出し要求が完了するまでの平均時間
w_await作成された書き込み要求が完了するまでの平均時間
svctmサービスタイム。1回のI/Oに要する時間 (ミリ秒)。
%utilデバイスの帯域幅使用率(ビジー率)

見るべきポイントは %util。 %utilは (r/s + w/s) * svctm / 1000 で算出されている。単位時間内に処理待ちのI/O リクエストが存在していた時間の割合を示している。 つまりは%utilが 80% 以上の状態が続いている場合は、ディスクのI/Oに問題があると言える。

iotop コマンド

ディスクにボトルネックがあるとわかった。さらにどのプロセスがI/O要求されているか調べるには iotopコマンドで調べる。

# iotop -d 1 -o -b -t -P
    TIME   PID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
09:41:43   3550 be/4 oracle    125.61 K/s   31.40 K/s  0.00 %  0.48 % mariadbd --basedir=/usr
09:41:43   2910 be/4 grid        0.00 B/s    3.93 K/s  0.00 %  0.00 % mariadbd --basedir=/usr
09:41:43   3034 be/4 grid        0.00 B/s    7.85 K/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 31
09:41:44 Total DISK READ :       0.00 B/s | Total DISK WRITE :      11.74 K/s
09:41:44 Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       3.91 K/s
オプション説明
-d <秒>採取間隔
-oディスクI/Oを発生させたプロセスだけ表示
-bバッチ表示
-t時間を表示
-PプロセスID表示

コメント

タイトルとURLをコピーしました