本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。
「iostat」は、CPUの使用率とI/Oデバイスの使用状況を表示するコマンドです。
iostatはsysstatパッケージに収録されています。「sudo yum install iostat」あるいは「sudo apt-get install iostat」としてインストールできます ※。
※sysstatパッケージをインストールする前にパッケージの内容を確認するコマンドもある。「apt-cache -f search sysstat」と実行する。
iostat [オプション] [更新の間隔 [回数]]
※[ ]は省略可能な引数を示しています
短いオプション | 意味 |
---|---|
-c | CPU使用率のみを出力する |
-d | デバイス使用率のみを出力する |
-g グループ名 | 最後にグループ名を使って合計を出力する。対象デバイスは「-g TOTAL /dev/sda」のように指定可能。対象デバイスをALLにすると全デバイスの合計となる |
-h | 読みやすい表示形式で出力する(デバイス名の行と統計行の情報の2行に分かれる) |
-j 種類 | 永続的な名前で表示する。種類はID、LABEL、PATH、UUIDが指定可能で、「-j ID /dev/sda」あるいは「-j ID ALL」のように対象のデバイスを指定できる(自動的に「-h」も指定した状態になる) |
-k | KB毎秒で出力する |
-m | MB毎秒で出力する |
-N | デバイスマッパーの名称で表示する ※※ |
-p デバイス | 表示対象のデバイスを指定する。パーティションごとの情報を出力したい場合は「-p /dev/sda」のように指定するか、または「-p ALL」と指定する。ALLの場合、使用されていないデバイスも含めて全て出力される(「-z」を指定すると使用されていないデバイスは出力されない) |
-t | 計測した時刻を出力する |
-T | 合計のみ出力(「-g」と共に使用) |
-x | 拡張ディスク統計情報を出力する |
-y | 繰り返し表示する際に、最初に表示される“システム起動時からの統計情報(平均と合計)”を省略する |
-z | 表示対象の期間に使用されていないデバイス(入出力がゼロのデバイス)は表示しない |
※※LVM(Logical Volume Manager:論理ボリュームマネージャ)を用いた場合のデバイスマッパー名を表示する(関連記事)。
「iostat」では、CPU使用率(全CPUの平均:avg-cpu)の後、I/Oデバイスの使用状況を順に表示します(画面1)。
「iostat -c」ではCPU使用率のみを表示し、「iostat -d」でI/Oデバイスの使用状況に限定して表示します。
表示対象としたいデバイスを「-p」で指定できます。例えばCPUの情報が不要で、/dev/sdaを計測したい場合は「iostat -d -p /dev/sda」のように指定します。
iostat(画面1)
(CPU使用率とI/Oデバイスの使用状況を表示する)
iostat -c
(CPU使用率のみを表示する)
iostat -d
(I/Oデバイスの使用状況のみを表示する)
iostat -d -p /dev/sda
(/dev/sdaの使用状況を表示する)
画面1に表示された各項目の意味は、次の通りです。それぞれ、CPUでは起動(再起動)からの平均値を表示し、デバイスでは平均値と合計値を表示しています。
項目名 | CPU使用率の内訳 |
---|---|
%usr | アプリケーション(ユーザーレベル) |
%nice | アプリケーション(ナイス値による優先指定) |
%system | カーネル(システムレベル) |
%iowait | アイドル状態(ディスクI/Oリクエスト待ち) |
%steal | 他の仮想CPU向けのハイパーバイザ処理 |
%idle | アイドル状態(ディスクI/Oリクエスト待ち以外) |
項目名 | デバイス使用状況の内訳 |
---|---|
tps | 1秒当たりのI/Oリクエスト数(transfers per second) |
kB_read/s | 1秒当たりの読み出し量(KB単位) |
kB_wrtn/s | 1秒当たりの書き込み量(KB単位) |
kB_read | 読み出し量の合計(KB単位) |
kB_wrtn | 書き込み量の合計(KB単位) |
「iostat -x」を実行すると、I/Oデバイスの拡張情報を表示します(画面2、関連記事:DBシステム全体のボトルネックを突き止める)。項目数が多いため、80桁表示の端末では折り返し表示になります。画面2では端末画面を122桁で表示しています。
iostat -x(画面2)
(I/Oデバイスの拡張情報を表示)
iostat -d -x
(I/Oデバイスの拡張情報のみを表示し、CPU使用率は表示しない)
画面2に出力された項目の内容は以下の通りです。
項目名 | デバイス使用状況の内訳 |
---|---|
rrqm/s | マージされた1秒当たりの読み出し要求 ※※※ |
wrqm/s | マージされた1秒当たりの書き込み要求 |
r/s | 1秒当たりに完了できた読み出し要求(マージ後) |
w/s | 1秒当たりに完了できた書き込み要求(マージ後) |
rkB/s | 1秒当たりの読み出しセクタ数 |
wkB/s | 1秒当たりの書き込みセクタ数 |
avgrq-sz | 1回で要求(ReQuest)された平均セクタサイズ |
avgqu-sz | I/Oキュー(QUeue)の長さの平均 |
await | 作成された要求が完了するまでの平均時間 |
r_await | 作成された読み出し要求が完了するまでの平均時間 |
w_await | 作成された書き込み要求が完了するまでの平均時間 |
svctm | デバイスに発行されたI/O要求の平均サービス時間(廃止予定) |
%util | デバイスの帯域幅使用率 |
※※※同じデバイスに対する複数の読み出し(書き込み)要求を1回にまとめて処理した場合を示す値。
画面の幅を十分に取れず、読みにくい場合は、lessコマンドやcutコマンドを使って表示を工夫できます(連載第127回で扱ったmpstatコマンドの表示例を参照)。
以下のようにawkコマンドを使用することで、8項目以降を折り返して表示することも可能です(画面3)。
iostat -x | awk '{if (NF>7){printf "%-10s%10s%10s%10s%10s%10s%10s\n%-10s%10s%10s%10s%10s%10s%10s\n",$1,$2,$3,$4,$5,$6,$7,"",$8,$9,$10,$11,$12,$13,$14}else print}'
画面3にあるawkの処理内容を読みやすくするため、制御構造が分かりやすいよう以下に書き直してみました。処理中のelse部分には「{}」を補っています(第119回awkコマンドとif、第118回awkコマンドとprintf)。
{ if (NF>7){ printf "%-10s%10s%10s%10s%10s%10s%10s\n%-10s%10s%10s%10s%10s%10s%10s\n", $1,$2,$3,$4,$5,$6,$7,"",$8,$9,$10,$11,$12,$13,$14 } else { print } }
「iostat 秒数」または「iostat 秒数 回数」のように更新の間隔を指定すると、リアルタイムで統計情報を更新しながら表示します。回数を指定しなかった場合は[CTRL]+[C]で終了します。
計測した時刻を同時に表示したい場合は「-t」オプションを使います。
繰り返し表示する場合、最初の1回はシステム起動時からの統計情報が出力され、2回目以降は“直前の計測からの統計情報”となります。つまり「iostat 5」ならばそれまでの平均と、5秒ごとの平均の2種類の情報が出力されることになります。初回の出力が不要な場合は「-y」オプションを使用します。
「-z」を指定すると、アクセスがなかった(全ての項目が0だった)デバイスは表示されなくなります。
iostat -d -t -p /dev/sda 5(画面4)
(/dev/sdaの情報を5秒間隔で出力)
iostat -d -t -p ALL -z -y 5(画面5)
(全てのI/Oデバイスの情報を5秒間隔で出力する。入出力がなかったデバイスは出力しない)
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.