一般に sysstat パッケージが提供する iostat は、CPU とブロックデバイスの活動を報告します。スループットや使用率だけでは、ストレージがユーザーから見える問題を引き起こしていると断定できません。繰り返しサンプルとアプリケーション遅延を合わせて確認してください。
プロセス利用率 · レッスン 5
I/O 監視
iostat のサンプルを使って CPU とブロックデバイスの活動を調査する方法を学びます。
有用なサンプルを収集する
1秒間隔で拡張デバイス統計を実行します。
$ iostat -xz 1
一般的な実装では、最初のレポートが起動後の平均を含み、それ以降が各区間を表します。-x は拡張フィールドを追加し、-z は非活動デバイスを省略します。正常な時間帯と問題のある時間帯を捉えるため、複数の区間を観測してください。
iostat の最初のレポートは一般に何を表しますか?
CPU フィールドを読む
CPU セクションには通常、ユーザー(%user)、システム(%system)、アイドル(%idle)、I/O 待ち(%iowait)、仮想マシンの steal(%steal)時間があります。I/O 待ちは、未完了の I/O 要求が存在する間の CPU アイドル時間であり、ディスクがビジーである割合ではありません。
%iowait は何を表しますか?
デバイスフィールドを読む
フィールド名は sysstat のバージョンによって異なりますが、重要な概念には次があります。
- 1秒あたりの読み書き操作数またはデータ量は、ワークロードの速度を示します。
awaitは、キュー待ちとサービス時間を含む平均要求遅延を示します。- 平均キューサイズのフィールドは、待機中または処理中の要求を示します。
%utilは、経過時間のうちデバイスで I/O が進行していた割合を示します。
高い %util は単純な直列デバイスの飽和を示す場合がありますが、並列ストレージ、アレイ、仮想デバイスの性能容量へそのまま換算できません。遅延をデバイス設計、ワークロードパターン、サービス目標と比較してください。
平均 I/O 要求遅延と最も直接関連するフィールドはどれですか?
証拠を相関させる
結論を出す前に、デバイス名をマウントと下位デバイスへ対応付けます。
$ lsblk -o NAME,TYPE,SIZE,FSTYPE,MOUNTPOINTS
$ findmnt
次に iostat の区間を、アプリケーション応答時間、データベースまたはファイルシステム指標、プロセス単位の I/O と照合します。Device mapper、RAID、コンテナ、ネットワーク接続ストレージは層を追加し、それぞれ固有のツールが必要になる場合があります。
デバイスで高い %util を確認した後はどうすべきですか?
レッスン完了
I/O 監視 を完了しました
iostat を I/O 調査の証拠として使えるようになりました。
拡張統計を複数の区間で収集する。
CPU の I/O 待ちとデバイスのビジー時間を区別する。
遅延、キュー、スループット、使用率を合わせて解釈する。
デバイスをワークロードへ対応付け、アプリケーションへの影響を検証する。