こんにちは、Aireです。
今回はsarコマンドを使用して、Linuxサーバの性能に関するリソース情報を確認する方法を紹介します。
確認できる情報としては、CPUやメモリの負荷、ディスクI/Oなどがあります。
前提条件
本記事の内容は、RHEL 8.6を用いて作成しています。以下、OS情報を記載します。
1 2 3 4 5 |
$ cat /etc/redhat-release Red Hat Enterprise Linux release 8.6 (Ootpa) $ uname -r 4.18.0-372.36.1.el8_6.x86_64 |
sysstatをインストールする
「dnf install」コマンドを実行し、sysstatをインストールします。
1 |
$ dnf -y install sysstat |
インストール後、一度OSを再起動し、sysstat関連のサービスを起動します。サービスの起動が完了すると、「var/log/sa/saDD」というファイルが作成され、稼働情報の記録を開始します。(DDの部分は日付です)
sarコマンドで性能情報を確認する
「sar」コマンドを使用すると、性能情報が記録された「sa」ファイル(バイナリファイル)の中身を確認できます。
以下、実行例をいくつか紹介します。詳細は「man sar」を参照してください。
引数なしで実行する(sar)
「sar」コマンドの一番シンプルな実行方法は、以下のように「sar」とだけ入力する方法です。この方法では、当日の「var/log/sa/saDD」ファイルの記録データを確認できます。(DDは日付の数値)
1 2 3 4 5 6 7 8 9 10 |
$ sar Linux 4.18.0-372.36.1.el8_6.x86_64 (vm-rhel8u6-01) 01/22/23 _x86_64_ (2 CPU) 06:36:26 LINUX RESTART (2 CPU) 06:40:11 CPU %user %nice %system %iowait %steal %idle 06:50:11 all 0.76 0.00 0.38 0.00 0.00 98.86 07:00:11 all 0.23 0.00 0.32 0.00 0.00 99.46 07:10:11 all 0.29 0.00 0.35 0.01 0.00 99.35 (…途中省略…) |
CPU使用率を確認する(sar -u)
「-u」オプションを使用すると、CPU使用率を確認できます。
1 2 3 4 5 6 7 8 9 10 |
$ sar -u Linux 4.18.0-372.36.1.el8_6.x86_64 (vm-rhel8u6-01) 01/21/23 _x86_64_ (2 CPU) 11:17:18 LINUX RESTART (2 CPU) 11:20:43 CPU %user %nice %system %iowait %steal %idle 11:30:43 all 0.16 0.00 0.20 0.02 0.00 99.63 11:40:43 all 0.14 0.00 0.19 0.01 0.00 99.66 11:50:43 all 0.14 0.00 0.19 0.01 0.00 99.66 (…途中省略…) |
項目 | 説明 |
---|---|
%user | アプリケーション(ユーザレベル)の実行中に発生したCPU使用率。このフィールドには、仮想プロセッサの実行に費やした時間が含まれる。 |
%nice | 優先度の高い(= nice値が変更された)アプリケーション(ユーザレベル)の実行中に発生したCPU使用率。 |
%system | カーネル(システムレベル)の実行中に発生したCPU使用率。このフィールドには、ハードウェアおよびソフトウェアの割り込み処理に費やした時間が含まれる。 |
%iowait | システムに未処理のディスクI/Oリクエストがある間に、CPUがアイドル状態であった時間の割合 |
%steal | ハイパーバイザが別の仮想プロセッサ(ゲストOS)を処理している間に、仮想CPUが待機していた時間の割合 |
%idle | CPUがアイドル状態で、システムに未処理のディスクI/Oリクエストがなかった時間の割合 |
メモリ使用率を確認する(sar -r)
「-r」オプションを使用すると、メモリ使用率を確認できます。
1 2 3 4 5 6 7 8 9 10 |
$ sar -r Linux 4.18.0-372.36.1.el8_6.x86_64 (vm-rhel8u6-01) 01/21/23 _x86_64_ (2 CPU) 11:17:18 LINUX RESTART (2 CPU) 11:20:43 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 11:30:43 3333700 3339192 486968 12.75 8412 202636 410156 10.74 107760 231312 0 11:40:43 3333248 3338840 487420 12.76 8412 202640 410156 10.74 107804 231236 0 11:50:43 3333288 3338888 487380 12.76 8412 202640 410156 10.74 107816 231264 0 (…途中省略…) |
項目 | 説明 |
---|---|
kbmemfree | メモリの空き容量(KB) |
kbavail | スワップせずに新しいアプリケーションを開始するために利用可能なメモリ容量の推定値(KB) |
kbmemused | メモリの使用量(KB)。カーネル自身が使用しているメモリは考慮しない |
%memused | メモリの使用率(%) |
kbbuffers | カーネルのバッファとして使用しているメモリの容量(KB) |
kbcached | カーネルのキャッシュとして使用しているメモリの容量(KB) |
kbcommit | 現在のワークロードに必要なメモリの容量(KB)。メモリ不足にならないことを保証するために必要なRAM/スワップの推定容量 |
%commit | カーネルは通常、メモリをオーバーコミットするため、この値は100%より大きくなる場合がある。 |
kbactive | アクティブなメモリの容量(KB)。直近で使用されたメモリ且つ必要でない限り再利用されないメモリ |
kbinact | 非アクティブなメモリの容量(KB)。直近で使用されていないメモリであり、他の用途で再利用されるメモリ |
kbdirty | ディスクへのライトバックを待機しているメモリの容量(KB) |
ディスクI/Oを確認する(sar -b)
「-b」オプションを使用すると、ディスクI/Oを確認できます。
1 2 3 4 5 6 7 8 9 10 |
$ sar -b Linux 4.18.0-372.36.1.el8_6.x86_64 (vm-rhel8u6-01) 01/21/23 _x86_64_ (2 CPU) 11:17:18 LINUX RESTART (2 CPU) 11:20:43 tps rtps wtps bread/s bwrtn/s 11:30:43 0.64 0.26 0.38 12.05 3.92 11:40:43 0.33 0.01 0.32 0.28 3.00 11:50:43 0.29 0.00 0.29 0.00 2.63 (…途中省略…) |
項目 | 説明 |
---|---|
tps | ディスクに発行された1秒あたりのI/Oリクエスト数(tps = rtps + wtps) |
rtps | ディスクに発行された1秒あたりのRead I/Oリクエスト数 |
wtps | ディスクに発行された1秒あたりのWrite I/Oリクエスト数 |
bread/s | 1秒あたりのディスクからの読み取りデータ量(ブロック数)(1ブロック = 512バイト) |
bwrtn/s | 1秒あたりのディスクへの書き込みデータ量(ブロック数)(1ブロック = 512バイト) |
ネットワークの統計情報を確認する(sar -n)
「-n」オプションを使用すると、ネットワークの統計情報を確認できます。本オプションを使用する場合、引数となるキーワード(e.g., DEV, EDEV, FC, ICMP, …, TCP, UDP)を指定する必要があります。ここでは、キーワードとして「DEV」を選択した場合の結果を記載します。「DEV」を指定すると、ネットワークデバイスの統計情報を確認できます。
1 2 3 4 5 6 7 8 9 10 11 |
$ sar -n DEV Linux 4.18.0-372.36.1.el8_6.x86_64 (vm-rhel8u6-01) 01/22/23 _x86_64_ (2 CPU) 06:36:26 LINUX RESTART (2 CPU) 06:40:11 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 06:50:11 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 06:50:11 eth0 3.76 4.49 0.95 1.41 0.00 0.00 0.00 0.00 07:00:11 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 07:00:11 eth0 3.68 4.40 0.95 1.31 0.00 0.00 0.00 0.00 (…途中省略…) |
項目 | 説明 |
---|---|
IFACE | 統計情報が報告されるネットワークインターフェイスの名前 |
rxpck/s | 1秒あたりの受信パケット数 |
txpck/s | 1秒あたりの送信パケット数 |
rxkB/s | 1秒あたりの受信kB数 |
txkB/s | 1秒あたりの送信kB数 |
rxcmp/s | 1秒あたりの圧縮済み受信パケット数 |
txcmp/s | 1秒あたりの圧縮済み送信パケット数 |
rxmcst/s | 1秒あたりのマルチキャスト受信パケット数 |
%ifutil | ネットワークインターフェイスの使用率。半二重通信(half-duplex)の場合、rxkB/sとtxkB/sの合計をインターフェイス速度に対する割合として計算する。全二重通信(full-duplex)の場合、これはrxkB/sまたはtxkB/sの大きい方の値になる。 |
過去の性能情報を確認する(sar -f、sar -s、sar -e)
引数を使用しない場合、当日の性能情報しか確認できませんが、「-f」オプションを使用することで過去の日付の性能情報を確認できます。性能情報は「var/log/sa/saDD」ファイルに記録されており、例えば、21日の性能情報であれば「var/log/sa/sa21」を指定して確認します。
1 2 3 4 5 6 7 8 9 10 |
$ sar -f /var/log/sa/sa21 Linux 4.18.0-372.36.1.el8_6.x86_64 (vm-rhel8u6-01) 01/21/23 _x86_64_ (2 CPU) 11:17:18 LINUX RESTART (2 CPU) 11:20:43 CPU %user %nice %system %iowait %steal %idle 11:30:43 all 0.16 0.00 0.20 0.02 0.00 99.63 11:40:43 all 0.14 0.00 0.19 0.01 0.00 99.66 11:50:43 all 0.14 0.00 0.19 0.01 0.00 99.66 (…途中省略…) |
また、「-s」オプションや「-e」オプションを使用すると、指定した時間帯の性能情報を確認できます。「-s」オプションは開始時間、「-e」オプションは終了時間を指定できます。時間帯は「hh:mm:ss」または「hh:mm」のフォーマットで指定します。
1 2 3 4 5 6 7 8 |
$ sar -s 15:00 -e 16:00 Linux 4.18.0-372.36.1.el8_6.x86_64 (vm-rhel8u6-01) 01/22/23 _x86_64_ (2 CPU) 15:00:11 CPU %user %nice %system %iowait %steal %idle 15:10:11 all 0.25 0.00 0.31 0.00 0.00 99.44 15:20:11 all 0.21 0.00 0.29 0.00 0.00 99.50 15:30:11 all 0.21 0.00 0.29 0.00 0.00 99.50 (…途中省略…) |
リアルタイムで性能情報を確認する(sar interval count)
リアルタイムで性能情報を確認したい場合は、情報を取得する間隔(interval)と取得する回数(count)を指定します。countを省略すると、処理が中止されるまで性能情報が取得され続けます。
以下のコマンドは、5秒間隔で3回性能情報を取得しています。
1 2 3 4 5 6 7 8 |
$ sar 5 3 Linux 4.18.0-372.36.1.el8_6.x86_64 (vm-rhel8u6-01) 01/22/23 _x86_64_ (2 CPU) 17:13:45 CPU %user %nice %system %iowait %steal %idle 17:13:50 all 0.40 0.00 0.30 0.00 0.00 99.30 17:13:55 all 0.10 0.00 0.30 0.00 0.00 99.60 17:14:00 all 0.20 0.00 0.10 0.00 0.00 99.70 Average: all 0.23 0.00 0.23 0.00 0.00 99.53 |
性能情報をグラフ化する(sadf -g)
「sadf」コマンドは「sa」ファイルの性能情報を表示するためのコマンドです。「-g」オプションを使用すると、性能情報を可視化したグラフを「SVG」フォーマットで出力できます。以下の実行例のように、「- -」以降に前節までに紹介したようなオプションを記述できます。
1 |
sadf -g /var/log/sa/sa21 -- -s 12:00 -e 18:00 > sa_performance_graph.svg |
グラフはブラウザ等で確認できます。
性能情報の記録間隔を指定する
性能情報は「var/log/sa/saDD」に記録されますが、デフォルトでは10分間隔で記録されます。記録間隔は短くすることも長くすることもできます。
設定情報は「/usr/lib/systemd/system/sysstat-collect.timer」に記載されています。本ファイルは「sysstat」インストール時に作成されるデフォルトのユニットファイルであり、「OnCalendar=〜」の行が記録間隔に関する設定です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# /usr/lib/systemd/system/sysstat-collect.timer # (C) 2014 Tomasz Torcz <tomek@pipebreaker.pl> # # sysstat-11.7.3 systemd unit file: # Activates activity collector every 10 minutes [Unit] Description=Run system activity accounting tool every 10 minutes [Timer] OnCalendar=*:00/10 [Install] WantedBy=sysstat.service |
設定方法ですが、デフォルトのユニットファイルを直接編集することは推奨されていません。これは、パッケージのアップデート時にデフォルトのユニットファイルが上書きされる可能性があるためです。推奨される設定方法は以下の2つです。
- 「/etc/systemd/system/<ユニットファイル名>.d/」にデフォルトのユニットファイルとの差分のみが記載された差分ファイルを用意する。
- 「/etc/systemd/system/」にデフォルトのユニットファイルのコピーを用意し、差分を編集する。
「systemd」は「/usr/lib/systemd/system」よりも「/etc/systemd/system」配下にある同ユニットファイルの設定を優先します。そのため、1の方法では、デフォルトのユニットファイルを参照しつつ、ユーザが設定した差分が適用されます。2の方法では、デフォルトのユニットファイルは参照されないため、パッケージのアップデートによる変更は適用されず、また、差分だけでなく全ての設定を記載しておく必要があります。
1の方法の具体的な説明ですが、「systemctl edit」コマンドで行います。コマンドを実行すると、エディタが立ち上がるため、以下のように差分を記載して、保存・終了します(ここでは記録間隔を1分に変更しています)。本設定は「/etc/systemd/system/sysstat-collect.timer.d/override.conf」に自動的に保存されます。
1 2 3 4 |
$ systemctl edit sysstat-collect.timer [Timer] OnCalendar=*:00/01 |
2の方法の具体的な説明ですが、「systemctl edit」コマンドに「–full」オプションを追加して実行します。コマンドを実行すると、エディタが立ち上がるため、以下のように差分を記載して、保存・終了します(ここでは記録間隔を1分に変更しています)。本設定は「/etc/systemd/system/sysstat-collect.timer」に自動的に保存されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ systemctl edit --full sysstat-collect.timer # /usr/lib/systemd/system/sysstat-collect.timer # (C) 2014 Tomasz Torcz <tomek@pipebreaker.pl> # # sysstat-11.7.3 systemd unit file: # Activates activity collector every 10 minutes [Unit] Description=Run system activity accounting tool every 10 minutes [Timer] OnCalendar=*:00/01 [Install] WantedBy=sysstat.service |
「sa」ファイルの性能情報を「sar」ファイルに記録する時間を変更する
「sar」ファイルは、「sa」ファイルの性能情報をテキスト形式に変換して記録したファイルです。「sar」ファイルの作成は1日1回行われます。
作成時間は「/usr/lib/systemd/system/sysstat-summary.timer」に記載されており、デフォルトでは、00時07分になっています。(設定変更の方法は前章を参考にしてください)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# /usr/lib/systemd/system/sysstat-summary.timer # (C) 2014 Tomasz Torcz <tomek@pipebreaker.pl> # # sysstat-11.7.3 systemd unit file: # Triggers daily summary generation. # Activates sysstat-summary.service [Unit] Description=Generate summary of yesterday's process accounting [Timer] OnCalendar=00:07:00 [Install] WantedBy=sysstat.service |
その他の設定変更(/etc/sysconfig/sysstat)
「/etc/sysconfig/sysstat」ファイルには、sysstatに関する様々な設定が記載されています。
- HISTORY…「sa」ファイルと「sar」ファイルの保存日数を設定します。29以上の値に変更した場合、ファイル名(sarDD)の重複を避けるため、「var/log/sa/」配下に追加のディレクトリ「YYYYMM」が作成され、「sa」ファイルと「sar」ファイルが保存されるようになります。(デフォルト:28)
- COMPRESSAFTER…指定した日数以前の「sa」ファイルと「sar」ファイルを、後述のZIPで指定した圧縮方法を用いて圧縮します。(デフォルト:31)
- SADC_OPTIONS…「sa」ファイルに性能情報を記録する「sadc」コマンドのオプションを指定します。詳細は「man sadc」を参照してください。(デフォルト:”-S DISK”)
- SA_DIR…「sa」ファイルと「sar」ファイルの保存先を指定します。(デフォルト:/var/log/sa)
- ZIP…圧縮方法を指定します。(デフォルト:xz)
- YESTERDAY…「sar」ファイルを自動で作成する際に当日分を作成するか前日分を作成するか指定します。(デフォルト:前日分を作成する)
- REPORTS…「sar」ファイルを自動で作成するか指定します。(デフォルト:自動で作成する)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$ cat /etc/sysconfig/sysstat # sysstat-11.7.3 configuration file. # How long to keep log files (in days). # If value is greater than 28, then use sadc's option -D to prevent older # data files from being overwritten. See sadc(8) and sysstat(5) manual pages. HISTORY=28 # Compress (using xz, gzip or bzip2) sa and sar files older than (in days): COMPRESSAFTER=31 # Parameters for the system activity data collector (see sadc manual page) # which are used for the generation of log files. SADC_OPTIONS=" -S DISK" # Directory where sa and sar files are saved. The directory must exist. SA_DIR=/var/log/sa # Compression program to use. ZIP="xz" # By default sa2 script generates yesterday's summary, since the cron job # usually runs right after midnight. If you want sa2 to generate the summary # of the same day (for example when cron job runs at 23:53) set this variable. #YESTERDAY=no # By default sa2 script generates reports files (the so called sarDD files). # Set this variable to false to disable reports generation. #REPORTS=false |
以上、ここまで。