連載
» 2017年07月20日 05時00分 UPDATE

Linux基本コマンドTips(128):【 iostat 】コマンド――I/Oデバイスの使用状況を表示する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介してきます。今回は、I/Oデバイスの使用状況を表示する「iostat」コマンドです。

iostatコマンドとは?

 「iostat」は、CPUの使用率とI/Oデバイスの使用状況を表示するコマンドです。

 iostatはsysstatパッケージに収録されています。「sudo yum install iostat」あるいは「sudo apt-get install iostat」としてインストールできます ※。

※sysstatパッケージをインストールする前にパッケージの内容を確認するコマンドもある。「apt-cache -f search sysstat」と実行する。




iostatコマンドの書式

iostat [オプション] [更新の間隔 [回数]]

※[ ]は省略可能な引数を示しています





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:論理ボリュームマネージャ)を用いた場合のデバイスマッパー名を表示する(関連記事)。




CPU使用率とI/Oデバイスの使用状況を表示する

 「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 画面1 iostatを実行したところ

 画面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単位)


I/Oデバイスの拡張情報を表示する

 「iostat -x」を実行すると、I/Oデバイスの拡張情報を表示します(画面2、関連記事:DBシステム全体のボトルネックを突き止める)。項目数が多いため、80桁表示の端末では折り返し表示になります。画面2では端末画面を122桁で表示しています。

コマンド実行例

iostat -x画面2

(I/Oデバイスの拡張情報を表示)

iostat -d -x

(I/Oデバイスの拡張情報のみを表示し、CPU使用率は表示しない)


画面2 画面2 I/Oデバイスの拡張情報を表示したところ

 画面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 画面3 iostat -xの出力を加工したところ

 画面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
  }
}


I/Oデバイスの使用状況をリアルタイム表示する

 「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秒間隔で出力する。入出力がなかったデバイスは出力しない)


画面4 画面4 /dev/sdaの使用状況を5秒間隔で表示しているところ
画面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© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。