sar コマンドでよく使うオプションのメモ (CPU とメモリ)
sar コマンドでわりとよく使うオプションのうち CPU とメモリに関するメモ。
普段は AWS の EC2 インスタンスに入って使うことが多いのでこのエントリーを書くときも EC2 インスタンスに入って sar コマンドを実行した結果とかをメモっている。
sar コマンドのバージョン。
$ sar -V sysstat version 10.1.5
sar コマンドのオプション
sar コマンドはプロセスのメモリ、プロセス、スワップ、ディスク IO、ネットワーク、ロードアベレージ、CPU ……等の統計情報を表示するコマンド。
システムの一通りの情報が揃っているので「なにか変だな」みたいなときはまず使ってみる、みたいな使い方をすることが多いように思う。
sar コマンドはリアルタイムの統計情報を取得して表示することのほかに過去の統計情報を表示することもできるが、このページではリアルタイムの統計情報の表示についてメモしておく。
自分はなんとなく使うことが多い気がするのでよく使うオプションをメモしておく => オプションがかなり多いので CPU とメモリに関してメモしておく
-h オプション: ヘルプ
-h
オプションを指定すると sar コマンドの使い方を表示する……んだけど man sar
が使えないときにしか使わない。
$ sar -h Usage: sar [ options ] [ <interval> [ <count> ] ] Main options and reports: -b I/O and transfer rate statistics -B Paging statistics -d Block device statistics -F [ MOUNT ] Filesystems statistics -H Hugepages utilization statistics -I { <int> | SUM | ALL | XALL } Interrupts statistics -m { <keyword> [,...] | ALL } # 省略
interval, count
オプションじゃないんだけど sar コマンドでリアルタイムの統計情報を取得するときは必ずといっていいほど指定するやつ。
sar
みたいに interval なしで実行するとこんな感じで起動 (再起動) してからシステムが一定間隔で記録してくれている統計情報を表示するんだけど、
$ sar 12:25:16 PM LINUX RESTART 12:30:01 PM CPU %user %nice %system %iowait %steal %idle 12:40:01 PM all 0.01 0.00 0.02 0.00 0.00 99.96 12:50:01 PM all 0.01 0.00 0.02 0.00 0.00 99.97 01:00:01 PM all 0.02 0.00 0.01 0.00 0.00 99.97 01:10:01 PM all 0.01 0.00 0.02 0.00 0.01 99.96 Average: all 0.01 0.00 0.02 0.00 0.00 99.97
sar 5
みたいに interval を指定すると指定した interval 秒ごとに表示を更新する。
$ sar 5 01:21:41 PM CPU %user %nice %system %iowait %steal %idle 01:21:46 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:21:51 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:21:56 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:22:01 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:22:06 PM all 0.00 0.00 0.00 0.00 0.00 100.00
sar 5 3
みたいに interval と count を指定すると指定した interval 秒ごとに count 回分だけ表示を更新する。
$ sar 5 3 01:22:46 PM CPU %user %nice %system %iowait %steal %idle 01:22:51 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:22:56 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:23:01 PM all 0.00 0.00 0.00 0.00 0.00 100.00 Average: all 0.00 0.00 0.00 0.00 0.00 100.00
-u: CPU 使用率の表示
-u
オプションを指定すると CPU 使用率を表示する。
sar
コマンドは表示するリソースをオプションで指定しないときは -u
オプションを指定するときと同じように動くので sar
と sar -u
は実質同じ。
表示項目の単位はパーセンテージ。
$ sar -u 5 2 02:04:21 PM CPU %user %nice %system %iowait %steal %idle 02:04:26 PM all 0.00 0.00 0.00 0.00 0.00 100.00 02:04:31 PM all 0.00 0.00 0.00 0.00 0.00 100.00 Average: all 0.00 0.00 0.00 0.00 0.00 100.00
ALL を指定するとすべての表示項目を出力する。
$ sar -u ALL 5 2 02:05:00 PM CPU %usr %nice %sys %iowait %steal %irq %soft %guest %gnice %idle 02:05:05 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 02:05:10 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 Average: all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
-u
オプションを指定して CPU 使用率を表示するときの表示項目について軽くメモしておく。
表示項目の単位はパーセンテージ。
項目 | 意味 |
---|---|
%user | カーネル以外が CPU を使用した時間。仮想マシンの実行に使用した時間も含まれる |
%usr | カーネル以外が CPU を使用した時間。仮想マシンの実行に使用した時間は含まれない |
%nice | nice 値を変更しているプロセスが CPU を使用した時間 |
%system | カーネルが CPU を使用した時間。ハードウェア割り込みとソフトウェア割り込みの処理に使用した時間も含まれる |
%sys | カーネルが CPU を使用した時間。ハードウェア割り込みとソフトウェア割り込みの処理に使用した時間も含まれる |
%iowait | IO 待ちで CPU がアイドルだった時間 |
%steal | 仮想マシンから盗まれた時間 ※ |
%irq | ハードウェア割り込みの処理に CPU を使用した時間 |
%soft | ソフトウェア割り込みの処理に CPU を使用した時間 |
%guest | 仮想マシンの実行に CPU を使用した時間 |
%gnice | nice 値を変更している仮想マシンの実行に CPU を使用した時間 |
%idle | CPU がアイドルだった時間 |
%steal: 仮想マシンから盗まれた時間
「仮想マシンから盗まれた時間」とはなにを意味するのか。
sar の man page は以下が書いてある。
Percentage of time spent in involuntary wait by the virtual CPU or CPUs while the hypervisor was servicing another virtual processor.
Google 翻訳にかけると ハイパーバイザーが別の仮想プロセッサーにサービスを提供している間に、1つまたは複数の仮想CPUが不本意に待機した時間の割合
って感じで、OS が仮想マシン (仮想サーバー) 上で動いているときに意味を持ってくる値で、仮想マシンが CPU を要求するけど CPU の使用率の上限が決められていて仮想マシンが CPU を利用できないときとか、仮想マシンが CPU を要求するけど 他の仮想マシンが CPU を使いまくってて CPU を利用できないときに %steal が上昇する。
自分は普段あまり %steal の上昇は見ないような気がするけど AWS の EC2 の t2 とかのバーストパフォーマンスインスタンスを使ってるときに見たりする。 たとえば、t2 インスタンスとかで CPU をぶん回して CPU バーストして CPU 使用率が 100% に張り付くような状態を続けていくといずれ CPU クレジットを使い切って CPU 使用率が落ちていく。 このへんを sar で見てると %steal の値が上昇していくのが分かる。
プログラムが仮想マシン上で動いていて CPU 使用率はそんなに高くないんだけど CPU バウンドっぽい……みたいなときは %steal の値が上昇しているかチェックしてみるのがよさそう。
-P: コアごとの CPU 使用率の表示
-P
オプションを指定するとコアごとの CPU 使用率を表示する。
表示項目の単位はパーセンテージ。
-P
オプションはどのコアの CPU 使用率を表示するかも指定することができる。
-P
オプションに続けて ALL
を指定するとすべてのコアそれぞれの CPU 使用率とすべてのコアの合計の CPU 使用率を表示する。
CPU
のところにどのコアかが表示する。コアは 0 始まり。
t2.micro インスタンスで sar コマンドを実行しているのでコアが1つしかないが、複数コアがあるときはコアごとの情報を出力する。
$ sar -P ALL 5 2 01:41:58 PM CPU %user %nice %system %iowait %steal %idle 01:42:03 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:42:03 PM 0 0.00 0.00 0.00 0.00 0.00 100.00 01:42:03 PM CPU %user %nice %system %iowait %steal %idle 01:42:08 PM all 0.00 0.00 0.00 0.00 0.00 100.00 01:42:08 PM 0 0.00 0.00 0.00 0.00 0.00 100.00 Average: CPU %user %nice %system %iowait %steal %idle Average: all 0.00 0.00 0.00 0.00 0.00 100.00 Average: 0 0.00 0.00 0.00 0.00 0.00 100.00
-P
オプションに続けて表示するコアを指定すると指定したコアそれぞれの CPU 使用率を表示する。
CPU
のところにどのコアかが表示する。コアは 0 始まり。
$ sar -P 0 5 2 01:47:33 PM CPU %user %nice %system %iowait %steal %idle 01:47:38 PM 0 0.00 0.00 0.00 0.00 0.00 100.00 01:47:43 PM 0 0.00 0.00 0.00 0.00 0.00 100.00 Average: 0 0.00 0.00 0.00 0.00 0.00 100.00
-r: メモリ使用率の表示
-r
オプションを指定するとメモリ使用率を表示する。
表示項目の単位はキロバイト。
$ sar -r 5 2 01:50:11 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 01:50:16 PM 536276 470688 46.74 2088 347508 191396 19.01 160256 220424 296 01:50:21 PM 536276 470688 46.74 2088 347508 191396 19.01 160256 220424 296 Average: 536276 470688 46.74 2088 347508 191396 19.01 160256 220424 296
-r
オプションを指定してメモリ使用率を表示するときの表示項目について軽くメモしておく。
表示項目の単位はキロバイト。
表示項目 | 意味 |
---|---|
kbmemfree | 使用可能な空きメモリの量 |
kbmemused | 使用中のメモリの量。カーネルが使用中のメモリの量は含まない |
%memused | メモリ使用率 |
kbbuffers | カーネルがバッファとして使用中のメモリの量 |
kbcached | カーネルがキャッシュとして使用中のメモリの量 |
kbcommit | システムの動作に必要な事前に確保されているメモリの量 (RAM + swap) |
%commit | システムの動作に必要な事前に確保されているメモリの総メモリ量に対する割合 (RAM + swap) ※ |
kbactive | アクティブなメモリの量 (最近使用されたメモリ。絶対に必要がない限り通常は再利用されないメモリ) |
kbinact | アクティブではないメモリの量 (最近使用されたメモリ。他に用途があれば再利用されるメモリ) |
kbdirty | ディスクに書き戻すのを待機しているメモリの量 |
カーネルはオーバーコミット (実メモリ以上にメモリをプロセスに割り当てる) することがあるので %commit は 100% 以上になることがある。