RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

sar コマンド【使い方 まとめ】

はじめに

みなさんこんにちはa_renrenです。
日々、サーバを運用される方であれば、サーバの動作が遅くなったり、不具合が発生した場合、原因を特定するためにコマンドでサーバのリソース状況を確認するかと思います。
リソース状況を確認するコマンドは、topやfreeなど色々コマンドがありますが、今回は、リソース状況の確認でよく使用するsarコマンドについて少しまとめてみました。

Linuxの理解をより深めたい方へ以下関連おすすめブログ
ls コマンド 【使い方 まとめ】
find コマンド 【使い方 まとめ】
iptables まとめ【Linux ファイアウォール】
sed コマンド【使い方 まとめ】
vi コマンド【使い方まとめ】
Linuxのファイル操作でよく使うLinuxコマンド
初心者のためのawkコマンド
実務で使える!基本的なシェル(Linux)コマンドの話 ~forとsed~
【Linux】今振り返りたい、プロセスって何?
 ・iptables まとめ【Linux ファイアウォール】

sar コマンドとは

sarコマンドはとても多機能なコマンドで、CPUやメモリ、ディスクI/O、パケット数、ロードアベレージなどのさまざまなシステム統計情報を確認することができます。
また、ほかのコマンドと違い、sarコマンドでは現状のリソース状況に加え、過去のリソース状況についても確認することができます。
sarコマンドは、以下のような書式となっています。

sar [ オプション ] <時間間隔> <回数>

また、sarコマンドには様々なオプションが用意されており、オプションを使い分けることで一つのコマンドで確認できる情報が変わってきます。

よく使うオプション

オプション 説明
-A 全ての項目を表示する
-b ディスクの入出力と転送レート情報を表示する
-c プロセスの生成回数を表示する
-f ログファイルを指定する
-n DEV ネットワーク関連の情報を表示する
-n EDEV ネットワーク関連のエラー情報を表示する
-r メモリとスワップ関連の情報を表示する
-u CPU関連の情報を表示する (オプションがない場合と同様)
-P id/ALL CPUごとの情報を表示する
-S スワップの情報を表示する

実際にsarコマンドを使用してリソース状況の確認を行ってみたいと思います。
※コマンドはCentOS Linux release 8.3.2011の環境で実行しています

リソース状況の確認

CPUの確認

CPUの確認では、sar -P ALLオプションをよく使用します。

実際に使用すると以下のように、当日の0時からsarコマンドを使用した時間までのCPUの情報を表示してくれます。
デフォルトでは、10分おきに記録されるようになっているため、10分毎の情報が出力されています。
こちらの記録間隔は/usr/lib/systemd/system/sysstat-collect.timerOnCalendar=*:00/10の値を変更することによって変えることができます。

[root@test ~]# sar -P ALL
Linux 4.18.0-193.14.2.el8_2.x86_64 (test)      2022年04月06日  _x86_64_        (1 CPU)

00時00分04秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00時10分04秒     all      0.20      0.00      0.36      0.01      0.01     99.42
00時10分04秒       0      0.20      0.00      0.36      0.01      0.01     99.42

00時10分04秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00時20分00秒     all      0.14      0.00      0.30      0.00      0.01     99.55
00時20分00秒       0      0.14      0.00      0.30      0.00      0.01     99.55

:
省略
:

16時10分00秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
16時20分00秒     all      0.13      0.00      0.30      0.00      0.02     99.56
16時20分00秒       0      0.13      0.00      0.30      0.00      0.02     99.56

16時20分00秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
16時30分00秒     all      0.12      0.00      0.30      0.01      0.02     99.55
16時30分00秒       0      0.12      0.00      0.30      0.01      0.02     99.55

平均値:      CPU     %user     %nice   %system   %iowait    %steal     %idle
平均値:      all      0.15      0.01      0.32      0.00      0.02     99.50
平均値:        0      0.15      0.01      0.32      0.00      0.02     99.50

表示されている項目の内容は、以下の通りです。

項目 説明
%user ユーザ(アプリケーション)が使用しているCPU使用率
%nice nice 値が変更されたプロセスがCPUを使用した時間の割合
%system カーネルがCPUを使用している時間の割合
%iowait ディスクI/O待ちの時間の割合
%steal 仮想環境を使用している環境においてゲストOPSがCPUを割り当てられなかった時間の割合
%idle CPUが処理待ちの状態の時間の割合

過去(今月)の日にちの情報を確認するには、-f /var/log/sa/sa02のようにログファイルを指定します。
sa02の02は日付を表していますので、こちらの値を10にすれば当月の10日の情報を確認することができます。

[root@test ~]# sar -P ALL -f /var/log/sa/sa02
Linux 4.18.0-193.14.2.el8_2.x86_64 (test)      2022年04月02日  _x86_64_        (1 CPU)

00時00分04秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00時10分05秒     all      0.22      0.00      0.38      0.01      0.02     99.38
00時10分05秒       0      0.22      0.00      0.38      0.01      0.02     99.38

00時10分05秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00時20分06秒     all      0.15      0.00      0.31      0.00      0.02     99.53
00時20分06秒       0      0.15      0.00      0.31      0.00      0.02     99.53

:
省略
:

23時30分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
23時40分02秒     all      0.16      0.00      0.30      0.00      0.01     99.53
23時40分02秒       0      0.16      0.00      0.30      0.00      0.01     99.53

23時40分02秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
23時50分02秒     all      0.15      0.00      0.30      0.00      0.02     99.53
23時50分02秒       0      0.15      0.00      0.30      0.00      0.02     99.53

平均値:      CPU     %user     %nice   %system   %iowait    %steal     %idle
平均値:      all      0.16      0.01      0.32      0.00      0.02     99.49
平均値:        0      0.16      0.01      0.32      0.00      0.02     99.49

リアルタイムの情報を確認する場合は、以下のようにコマンドの最後に時間間隔を指定すると、その時間間隔でこちらが止めるまで情報を出力してくれます。
回数を指定すると、その回数までリアルタイムの情報を出力してくれます。

以下は、時間間隔を2で指定しているため、2秒ごとにCPUの情報を出力しています。
表示に変化をつけるため、sarコマンドを実行した数秒後に、CPUを使用するコマンドを裏側で実行してみました。
すると以下のように、%idleの割合が減っていき、%user%systemの割合が増えていっていることが確認でき、リアルタイムの情報を出力していることがわかります。

[root@test ~]# sar -P ALL 2
Linux 4.18.0-193.14.2.el8_2.x86_64 (test)       2022年04月06日  _x86_64_        (1 CPU)

17時12分27秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
17時12分29秒     all      0.00      0.00      0.50      0.00      0.00     99.50
17時12分29秒       0      0.00      0.00      0.50      0.00      0.00     99.50

17時12分29秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
17時12分31秒     all     47.00      0.00     32.50      0.00      0.00     20.50
17時12分31秒       0     47.00      0.00     32.50      0.00      0.00     20.50

17時12分31秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
17時12分33秒     all     58.21      0.00     41.79      0.00      0.00      0.00
17時12分33秒       0     58.21      0.00     41.79      0.00      0.00      0.00

17時12分33秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
17時12分35秒     all     56.72      0.00     43.28      0.00      0.00      0.00
17時12分35秒       0     56.72      0.00     43.28      0.00      0.00      0.00

:
:
Ctrl + C でコマンドを止めるまで続く

メモリの確認

メモリの確認では、sar -rオプションを使用します。
CPUの時と同様、過去情報やリアルタイム情報を確認することができます。

[root@test ~]# sar -r 2 2
Linux 4.18.0-193.14.2.el8_2.x86_64 (test)       2022年04月06日  _x86_64_        (1 CPU)

17時27分06秒 kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
17時27分08秒    867808   1172680    884240     50.47      3184    428640   3281076    119.25    401436    220864         0
17時27分10秒    867840   1172712    884208     50.47      3184    428640   3281076    119.25    401436    220864         0
平均値:     867824   1172696    884224     50.47      3184    428640   3281076    119.25    401436    220864         0
[root@test ~]#

表示されている項目の内容は以下の通りです。

項目 説明
kbmemfree 空きメモリの容量(KB)
kbavail 利用可能なメモリの容量(KB)
kbmemused 使用中のメモリの容量(KB)
%memused メモリの使用率
kbbuffers バッファの使用量(KB)
kbcached キャッシュの使用量(KB)
kbcommit システムの動作に必要な事前に確保されているメモリ
%commit 総メモリ容量に対する、システムの動作に必要なメモリの割合
kbactive 最近使用されたメモリで、必要のない限り再利用されないメモリの容量(KB)
kbinact 最近使用されたメモリで、ほかに用途があれば再利用されるメモリの容量(KB)
kbdirty ディスクに書き戻されるのを待機しているメモリの容量(KB)

実際のメモリ使用量は、kbmemused - ( kbbuffers + kbcached ) で求めることができます。
上記の実例の平均では、884,224 - ( 3,184 + 428,640 ) = 452,400KBが実際のメモリの使用量になります。

スワップの確認

スワップの確認では、sar -Sオプションを使用します。

[root@test ~]# sar -S 2 2
Linux 4.18.0-193.14.2.el8_2.x86_64 (test)       2022年04月07日  _x86_64_        (1 CPU)

13時21分59秒 kbswpfree kbswpused  %swpused  kbswpcad   %swpcad
13時22分01秒    999420         0      0.00         0      0.00
13時22分03秒    999420         0      0.00         0      0.00
平均値:     999420         0      0.00         0      0.00
[root@test ~]#

表示されている項目の内容は以下の通りです。

項目 説明
kbswpfree スワップ領域の空き容量(KB)
kbswpused スワップ領域の使用量(KB)
%swpused スワップ領域の使用率
kbswpcad スワップ領域のキャッシュの使用量(KB)
%swpcad スワップ領域のキャッシュの使用率

基本的にメモリに余裕があれば、スワップが使用されることはなく、kbswpusedの値が0となります。
恒常的にkbswpusedの値が高い状態だと、メモリの容量が足りない可能性が高いため、メモリの見直し等が必要になってくるでしょう。

ネットワーク情報の確認

ネットワークの確認では、sar -n DEVオプションを使用します。
また、sar -n EDEVとするとネットワーク関連のエラー情報を表示することができます。

[root@test ~]# sar -n DEV 2 2
Linux 4.18.0-193.14.2.el8_2.x86_64 (test)       2022年04月08日  _x86_64_        (1 CPU)

11時39分28秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
11時39分30秒 virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11時39分30秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11時39分30秒    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11時39分30秒      eth0     12.50      0.50      0.73      0.05      0.00      0.00      0.00      0.00

11時39分30秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
11時39分32秒 virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11時39分32秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11時39分32秒    virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11時39分32秒      eth0     18.00      0.50      1.07      0.09      0.00      0.00      0.00      0.00

平均値:      IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
平均値:  virbr0-nic      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均値:         lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均値:     virbr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均値:       eth0     15.25      0.50      0.90      0.07      0.00      0.00      0.00      0.00
[root@test ~]#

表示されている項目の内容は以下の通りです。

項目 説明
rxpck/s 1秒間当たりの受信パケット数
txpck/s 1秒間当たりの送信パケット数
rxkB/s 1秒間当たりの受信パケットサイズ(KB)
txkB/s 1秒間当たりの送信パケットサイズ(KB)
rxcmp/s 1秒間当たりの受信圧縮パケット数
txcmp/s 1秒間当たりの送信圧縮パケット数
rxmcst/s 1秒間当たりの受信マルチキャストパケット数。
%ifutil ネットワークインタフェースの利用率

ディスクI/Oの確認

ディスクI/Oの確認では、sar -bオプションを使用します。

[root@test ~]# sar -b 2 2
Linux 4.18.0-193.14.2.el8_2.x86_64 (test)       2022年04月08日  _x86_64_        (1 CPU)

12時02分59秒       tps      rtps      wtps   bread/s   bwrtn/s
12時03分01秒      0.00      0.00      0.00      0.00      0.00
12時03分03秒      0.00      0.00      0.00      0.00      0.00
平均値:       0.00      0.00      0.00      0.00      0.00
[root@test ~]#

表示されている項目の内容は以下の通りです。

項目 説明
tps 1秒間当たりのI/Oリクエスト数
rtps 1秒間当たりの読み込みI/Oリクエスト数
wtps 1秒間当たりの書き込みI/Oリクエスト数
bread/s 1秒間当たりの読み込みブロック数
bwrtn/s 1秒間当たりの書き込みブロック数

まとめ

今回は、リソース状況の確認でよく使用するsarコマンドについてまとめてみました。
sarコマンドはオプションを使い分けることによって、様々なリソース状況を確認することができ、また、リアルタイム情報に加えて、過去情報も確認できる便利なコマンドということをわかっていただけたかと思います。
sarコマンド以外にもリソース状況を確認できるコマンドはたくさんありますので、ほかのコマンドと今回ご紹介したsarコマンドを合わせて使用して、より必要な情報を得ていただければと思います。
最後までお読みいただき有難うございました。

参考文献

Manpage of SAR
sar ファイルの各項目について、改めて調査してみました | SIOS Tech. Lab
sarコマンドの使い方 - Qiita


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.