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/s | 1秒当たりの読み出しセクタ数 |
wkB/s | 1秒当たりの書き込みセクタ数 |
avgrq-sz | 1回で要求(ReQuest)された平均セクタサイズ |
avgqu-sz | I/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表示 |
sar コマンド
sar コマンドでも同様の内容を確認できる。過去のデータを確認する際は活用すればよい。
# sar -d -p
Linux 5.14.0-427.31.1.el9_4.x86_64 (linux-test)
00時00分01秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
00時10分01秒 sda 0.76 0.11 21.82 29.03 0.00 0.78 0.61 0.05
00時20分01秒 sda 0.70 0.11 21.06 30.17 0.00 0.95 0.68 0.05
00時30分01秒 sda 0.70 0.00 20.59 29.55 0.00 0.78 0.64 0.04
00時40分01秒 sda 0.73 0.00 21.21 28.91 0.00 0.80 0.64 0.05
00時50分01秒 sda 0.77 0.00 21.89 28.54 0.00 0.85 0.65 0.05
01時00分01秒 sda 0.83 0.00 23.01 27.60 0.00 0.78 0.61 0.05
01時10分01秒 sda 1.11 0.00 27.64 24.89 0.00 0.70 0.49 0.05
01時20分01秒 sda 1.08 0.00 27.08 24.98 0.00 0.70 0.50 0.05
01時30分01秒 sda 0.88 0.00 23.65 26.91 0.00 0.80 0.58 0.05
01時40分01秒 sda 1.04 0.09 25.90 25.03 0.00 0.70 0.55 0.06
01時50分01秒 sda 0.72 0.00 21.18 29.27 0.00 0.82 0.65 0.05
02時00分01秒 sda 0.88 0.00 24.41 27.67 0.00 1.59 0.59 0.05
02時10分01秒 sda 0.73 0.00 21.06 28.91 0.00 0.91 0.67 0.05
02時20分01秒 sda 0.65 0.00 20.54 31.43 0.00 0.97 0.71 0.05
02時30分01秒 sda 0.61 0.00 19.83 32.68 0.00 1.00 0.77 0.05
02時40分01秒 sda 0.64 0.00 20.06 31.42 0.00 1.63 0.80 0.05
02時50分01秒 sda 0.69 0.00 21.41 31.17 0.00 1.05 0.73 0.05
03時00分01秒 sda 0.67 0.00 20.54 30.88 0.00 0.91 0.69 0.05
03時10分01秒 sda 3.30 2.33 282.49 86.31 0.01 4.44 0.38 0.13
コメント