全力で怠けたい

怠けるために全力を尽くしたいブログ。

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 オプションを指定するときと同じように動くので sarsar -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% 以上になることがある。

参考ページ