1.はじめに
性能問題が発生して、「CPU/メモリみたけど、問題なさそう。。残るはディスクだけ。」となったらこのコマンド!iostatさんの登場です!
ちょうど最近、iostatの出番があったので、備忘録としてここに記す。
2.iostatとは
「iostat」は、CPUの使用率とI/Oデバイスの使用状況を確認するコマンド。
早速、インストールしてみましょう。
(root)# yum install sysstat
================================================================================
パッケージ Arch バージョン リポジトリー サイズ
================================================================================
インストール:
sysstat x86_64 11.7.3-7.el8 InstallMedia-AppStream 425 k
依存関係のインストール:
lm_sensors-libs
x86_64 3.4.0-23.20180522git70f7e08.el8 InstallMedia-BaseOS 59 k
トランザクションの概要
================================================================================
インストール 2 パッケージ
合計サイズ: 484 k
インストール後のサイズ: 1.5 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
インストール中 : lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_ 1/2
scriptletの実行中: lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_ 1/2
インストール中 : sysstat-11.7.3-7.el8.x86_64 2/2
scriptletの実行中: sysstat-11.7.3-7.el8.x86_64 2/2
検証 : lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_ 1/2
検証 : sysstat-11.7.3-7.el8.x86_64 2/2
インストール済み:
lm_sensors-libs-3.4.0-23.20180522git70f7e08.el8.x86_64
sysstat-11.7.3-7.el8.x86_64
完了しました!
一瞬です。ここでインストールしたsysstatの中にiostatが含まれています。
他にも性能監視用のコマンドであるsarとかmpstat、pidstatが含まれています。別の機会に紹介できれば・・・
ではコマンド打ってみましょう。
(root)#iostat
Linux 4.18.0-373.el8.x86_64 2022年06月01日 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 0.06 0.01 0.00 99.88
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.01 0.00 29758 0
sda 0.14 12.45 1.99 42545645 6787996
dm-0 0.14 12.40 1.89 42356824 6456128
dm-1 0.03 0.04 0.09 151620 300400
dm-2 0.00 0.00 0.00 1388 2084
loop0 0.00 0.01 0.00 23593 0
こんな感じで表示できればOK!
見方はこの後で。
3.iostat主なオプション
iostatコマンドには、様々なオプションが用意されています。
オプション | 説明 |
---|---|
-c | CPU使用率のみを出力する |
-d | デバイス使用率のみを出力する |
-h | 読みやすい表示形式で出力する(デバイス名の行と統計行の情報の2行に分かれる) |
-p デバイス | 表示対象のデバイスを指定する。パーティションごとの情報を出力したい場合は「-p /dev/sda」のように指定するか、または「-p ALL」と指定する。 |
-t | 計測した時刻を出力する |
-x | 拡張ディスク統計情報を出力する ※これだけ覚えて※ |
-z | 表示対象の期間に使用されていないデバイス(入出力がゼロのデバイス)は表示しない |
では各コマンドを実行しましょう。
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 0.06 0.01 0.00 99.88
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.01 0.00 29758 0
sda 0.14 12.45 1.99 42557261 6788812
dm-0 0.14 12.39 1.89 42367352 6456944
dm-1 0.03 0.04 0.09 152708 300400
dm-2 0.00 0.00 0.00 1388 2084
loop0 0.00 0.01 0.00 23593 0
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 0.06 0.01 0.00 99.88
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.01 0.00 29758 0
sda 0.14 12.45 1.99 42557281 6788812
dm-0 0.14 12.39 1.89 42367352 6456944
dm-1 0.03 0.04 0.09 152728 300400
dm-2 0.00 0.00 0.00 1388 2084
loop0 0.00 0.01 0.00 23593 0
# 4.iostat実行結果の見方
avg-cpu: %user %nice %system %iowait %steal %idle
0.1% 0.0% 0.1% 0.0% 0.0% 99.9%
tps kB_read/s kB_wrtn/s kB_read kB_wrtn Device
0.00 0.0k 0.0k 29.1M 0.0k scd0
0.14 12.4k 2.0k 40.6G 6.5G sda
0.14 12.4k 1.9k 40.4G 6.2G dm-0
0.03 0.0k 0.1k 149.2M 293.4M dm-1
0.00 0.0k 0.0k 1.4M 2.0M dm-2
0.00 0.0k 0.0k 23.0M 0.0k loop0
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 0.06 0.01 0.00 99.88
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.01 0.00 29758 0
sda 0.14 12.45 1.99 42557473 6789012
sda1 0.00 0.00 0.00 7456 0
sda2 0.00 0.00 0.01 16112 29384
sda3 0.13 12.44 1.98 42526581 6759628
dm-0 0.14 12.39 1.89 42367352 6457144
dm-1 0.03 0.04 0.09 152920 300400
dm-2 0.00 0.00 0.00 1388 2084
loop0 0.00 0.01 0.00 23593 0
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 0.06 0.01 0.00 99.88
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.14 12.45 1.99 42579133 6789188
sda2 0.00 0.00 0.01 16112 29384
sda3 0.13 12.44 1.98 42548241 6759804
sda1 0.00 0.00 0.00 7456 0
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 0.06 0.01 0.00 99.88
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
scd0 0.00 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.90 0.00 0.00 63.86 0.00 0.80 0.00
sda 0.06 0.08 12.45 1.99 0.00 0.04 6.55 34.01 7.09 9.81 0.00 203.00 24.49 3.06 0.04
dm-0 0.04 0.10 12.40 1.89 0.00 0.00 0.00 0.00 3.92 9.62 0.00 334.06 19.08 3.12 0.04
dm-1 0.01 0.02 0.04 0.09 0.00 0.00 0.00 0.00 0.80 16.54 0.00 4.05 4.00 0.19 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.29 1.50 0.00 12.29 208.40 0.44 0.00
loop0 0.00 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.27 0.00 0.00 14.44 0.00 0.22 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 0.06 0.01 0.00 99.88
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
scd0 0.00 0.01 0.00 29758 0
sda 0.14 12.45 1.99 42579133 6789672
dm-0 0.14 12.40 1.89 42388360 6457720
dm-1 0.03 0.04 0.09 153572 300484
dm-2 0.00 0.00 0.00 1388 2084
loop0 0.00 0.01 0.00 23593 0
4.コマンド実行結果の見方
ここでは、コマンド実行した後の各数値の見方を紹介します。
iostat -xを実行しました。
avg-cpu: %user %nice %system %iowait %steal %idle
0.05 0.00 0.06 0.01 0.00 99.88
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
scd0 0.00 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.90 0.00 0.00 63.86 0.00 0.80 0.00
sda 0.06 0.08 12.45 1.98 0.00 0.04 6.55 34.01 7.09 9.81 0.00 202.99 24.49 3.06 0.04
dm-0 0.04 0.10 12.39 1.89 0.00 0.00 0.00 0.00 3.92 9.62 0.00 334.06 19.08 3.12 0.04
dm-1 0.01 0.02 0.04 0.09 0.00 0.00 0.00 0.00 0.80 16.54 0.00 4.05 4.00 0.19 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.29 1.50 0.00 12.29 208.40 0.44 0.00
loop0 0.00 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.27 0.00 0.00 14.44 0.00 0.22 0.00
列名 | 説明 |
---|---|
r/s | 1秒間に発行したリード要求数 |
w/s | 1秒間に発行したライト要求数 |
rkB/s | 1秒間に発行したリード要求のうち成功したkB数 |
wkB/s | 1秒間に発行したライト要求のうち成功したkB数 |
rrqm/s | 1秒間にマージされたリード要求の数 |
wrqm/s | 1秒間にマージされたライト要求の数 |
%rrqm | 1秒間にマージされたリード要求の割合% |
%wrqm | 1秒間にマージされたライト要求の割合% |
r_await | リード要求の平均待ち時間 |
w_await | ライト要求の平均待ち時間 |
aqu-sz | デバイスに発行した要求の平均キュー長 |
rareq-sz | デバイスに発行したリード要求の平均サイズ (キロバイト) |
wareq-sz | デバイスに発行したライト要求の平均サイズ (キロバイト) |
svctm | デバイス⇔ディスク間にかかった時間(ミリ秒) |
%util | デバイスの帯域幅の使用率 |
「r/s、w/s」と「rrqm/s、wrqm/s」の違い
LinuxはI/O性能を高めるため複数のI/OオペをまとめてI/Oデバイスに発行します。ディスクシークに時間がかかるため、リクエストをマージしてディスクにコマンドを送っている。
つまり、プログラムが呼び出しているリクエスト数の論理的数値はr/s、w/sとなるが、実際の物理的なリクエスト数は、まとめられたオペレーションのrequest/secを表しているrrqm/s、wrqm/sということになる。
システムへの負荷を確認するという目的では、物理的なリクエスト数をみるべきなので、rrqm/s、wrqm/sに着目するといいらしい。
5.参考URL