コンテンツにスキップ

iostat - CPU およびディスク I/O 統計チートシート

iostat - CPU およびディスク I/O 統計チートシート

iostatCPU利用率およびデバイス単位のディスク I/O 統計を報告します — スループット、IOPS、リクエストレイテンシー、キュー深度。ディスク飽和の診断時のLinuxの標準的な最初のステップです:ディスクは飽和しているか、リクエストはキューイングされているか、レイテンシーはスパイクしているか?sysstat パッケージの一部として mpstatpidstatsar と共に提供されます。

インストール

プラットフォームコマンド
Debian/Ubuntusudo apt install sysstat
Fedora/RHELsudo dnf install sysstat
Arch Linuxsudo pacman -S sysstat
macOSiostat はビルトイン (異なる出力)
確認iostat -V

基本的な使用

コマンド説明
iostatブート以降の1つのレポート (CPU + デバイス)
iostat 22秒ごとにリフレッシュ
iostat 2 52秒間隔で5つのレポート
iostat -x拡張統計 (有用なもの)
iostat -dデバイス統計のみ (CPUなし)
iostat -cCPU統計のみ

実際に欲しいコマンド

# 拡張、人間が読める、デバイス単位、2秒ごと
iostat -xmt 2
フラグ効果
-x拡張統計 (util%、await、aqu-sz、…)
-mMB/s でレポート (-k はKB/s)
-t各レポートでタイムスタンプを印刷
-p DEVデバイスのパーティション表示 (例: -p sda)
-d 22秒ごとのデバイスレポート
-h人間が読める、NVMeフレンドリーなフォーマット

拡張出力読み込み (-x)

カラム意味
r/s, w/s読み取り/書き込みリクエスト/秒 (IOPS)
rMB/s, wMB/s読み取り/書き込みスループット
rareq-sz / wareq-sz平均リクエストサイズ
r_await, w_await平均読み取り/書き込みレイテンシー (ms) — 重要指標
aqu-sz平均キュー深度 (フライト中のリクエスト)
%utilデバイスがビジーだった時間の割合

シグナルの解釈

観測解釈
%util が100%に近いデバイスが飽和 (SSD/NVMeは注意 — 並列化可能)
高い await (数ms+)リクエストが遅い — レイテンシーボトルネック
高い aqu-szリクエストがディスク排出より高速に積み上がっている
高いIOPS、低いスループット小さくランダムなI/O (典型的なDB/メタデータワークロード)
低いIOPS、高いスループット大きくシーケンシャルなI/O (バックアップ、ストリーミング)

最新のSSD/NVMeでは、%util が100%と表示される場合でもデバイスはまだヘッドルームがあります (リクエストを並列処理)。そこで awaitaqu-sz%util よりも信頼します。

CPU セクション

フィールド意味
%user / %niceユーザースペースで費やされた時間
%systemカーネルで費やされた時間
%iowaitI/O待機中のCPU アイドル (ストレージプレッシャーヒント)
%stealハイパーバイザーによって盗まれた時間 (うるさい隣人)
%idleアイドル時間

高い %iowait と共に高いディスク await は、ストレージがボトルネックであることを直接指します。

一般的なワークフロー

# 疑わしいディスクボトルネックをライブで監視
iostat -xmt 2

# 1つのデバイスとそのパーティションに焦点を当てる
iostat -xmt -p nvme0n1 2

# ロードテスト中にCPU iowaitをデバイスレイテンシーと相関させる
iostat -xmt 1 60 > iostat.log

iostat と関連ツール

ツールフォーカス
iostatデバイス単位のI/O + CPU統計
iotopプロセスがI/Oを行っている
dstat/dool1つのビューの統合CPU/ディスク/ネット
sar記録される履歴/システムアクティビティ

iostat でデバイスが遅いことを確認 → iotop でどのプロセスが責任か確認 → ionice で優先度を低下。

リソース