はじめに
みなさんこんにちは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.timer
のOnCalendar=*: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
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com