【Linux/コマンド】sarの使い方(Linuxサーバの性能情報を確認する)

こんにちは、Aireです。

今回はsarコマンドを使用して、Linuxサーバの性能に関するリソース情報を確認する方法を紹介します。

確認できる情報としては、CPUやメモリの負荷、ディスクI/Oなどがあります。

目次

前提条件

本記事の内容は、RHEL 8.6を用いて作成しています。以下、OS情報を記載します。

sysstatをインストールする

「dnf install」コマンドを実行し、sysstatをインストールします。

インストール後、一度OSを再起動し、sysstat関連のサービスを起動します。サービスの起動が完了すると、「var/log/sa/saDD」というファイルが作成され、稼働情報の記録を開始します。(DDの部分は日付です)

「systemctl start」コマンドで「sysstat」サービスを起動できますが、その後sarコマンドでデータを標準出力した際に数値の色分け(RHEL 8から導入)が行われませんでした。仕様を押さえられていませんが、「systemctl start」コマンドだけではサービスの起動が不十分に見えるので、一旦OSを再起動することをおすすめします。

sarコマンド実行結果:「systemctl start sysstat」実行後
sarコマンド実行結果:OS再起動後

sarコマンドで性能情報を確認する

「sar」コマンドを使用すると、性能情報が記録された「sa」ファイル(バイナリファイル)の中身を確認できます。

以下、実行例をいくつか紹介します。詳細は「man sar」を参照してください。

引数なしで実行する(sar)

「sar」コマンドの一番シンプルな実行方法は、以下のように「sar」とだけ入力する方法です。この方法では、当日の「var/log/sa/saDD」ファイルの記録データを確認できます。(DDは日付の数値)

CPU使用率を確認する(sar -u)

「-u」オプションを使用すると、CPU使用率を確認できます。

項目説明
%userアプリケーション(ユーザレベル)の実行中に発生したCPU使用率。このフィールドには、仮想プロセッサの実行に費やした時間が含まれる。
%nice優先度の高い(= nice値が変更された)アプリケーション(ユーザレベル)の実行中に発生したCPU使用率。
%systemカーネル(システムレベル)の実行中に発生したCPU使用率。このフィールドには、ハードウェアおよびソフトウェアの割り込み処理に費やした時間が含まれる。
%iowaitシステムに未処理のディスクI/Oリクエストがある間に、CPUがアイドル状態であった時間の割合
%stealハイパーバイザが別の仮想プロセッサ(ゲストOS)を処理している間に、仮想CPUが待機していた時間の割合
%idleCPUがアイドル状態で、システムに未処理のディスクI/Oリクエストがなかった時間の割合

メモリ使用率を確認する(sar -r)

「-r」オプションを使用すると、メモリ使用率を確認できます。

項目説明
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を確認できます。

項目説明
tpsディスクに発行された1秒あたりのI/Oリクエスト数(tps = rtps + wtps)
rtpsディスクに発行された1秒あたりのRead I/Oリクエスト数
wtpsディスクに発行された1秒あたりのWrite I/Oリクエスト数
bread/s1秒あたりのディスクからの読み取りデータ量(ブロック数)(1ブロック = 512バイト)
bwrtn/s1秒あたりのディスクへの書き込みデータ量(ブロック数)(1ブロック = 512バイト)

ネットワークの統計情報を確認する(sar -n)

「-n」オプションを使用すると、ネットワークの統計情報を確認できます。本オプションを使用する場合、引数となるキーワード(e.g., DEV, EDEV, FC, ICMP, …, TCP, UDP)を指定する必要があります。ここでは、キーワードとして「DEV」を選択した場合の結果を記載します。「DEV」を指定すると、ネットワークデバイスの統計情報を確認できます。

項目説明
IFACE統計情報が報告されるネットワークインターフェイスの名前
rxpck/s1秒あたりの受信パケット数
txpck/s1秒あたりの送信パケット数
rxkB/s1秒あたりの受信kB数
txkB/s1秒あたりの送信kB数
rxcmp/s1秒あたりの圧縮済み受信パケット数
txcmp/s1秒あたりの圧縮済み送信パケット数
rxmcst/s1秒あたりのマルチキャスト受信パケット数
%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」を指定して確認します。

また、「-s」オプションや「-e」オプションを使用すると、指定した時間帯の性能情報を確認できます。「-s」オプションは開始時間、「-e」オプションは終了時間を指定できます。時間帯は「hh:mm:ss」または「hh:mm」のフォーマットで指定します。

リアルタイムで性能情報を確認する(sar interval count)

リアルタイムで性能情報を確認したい場合は、情報を取得する間隔(interval)と取得する回数(count)を指定します。countを省略すると、処理が中止されるまで性能情報が取得され続けます。

以下のコマンドは、5秒間隔で3回性能情報を取得しています。

性能情報をグラフ化する(sadf -g)

「sadf」コマンドは「sa」ファイルの性能情報を表示するためのコマンドです。「-g」オプションを使用すると、性能情報を可視化したグラフを「SVG」フォーマットで出力できます。以下の実行例のように、「- -」以降に前節までに紹介したようなオプションを記述できます。

グラフはブラウザ等で確認できます。

性能情報の記録間隔を指定する

性能情報は「var/log/sa/saDD」に記録されますが、デフォルトでは10分間隔で記録されます。記録間隔は短くすることも長くすることもできます。

設定情報は「/usr/lib/systemd/system/sysstat-collect.timer」に記載されています。本ファイルは「sysstat」インストール時に作成されるデフォルトのユニットファイルであり、「OnCalendar=〜」の行が記録間隔に関する設定です。

設定方法ですが、デフォルトのユニットファイルを直接編集することは推奨されていません。これは、パッケージのアップデート時にデフォルトのユニットファイルが上書きされる可能性があるためです。推奨される設定方法は以下の2つです。

  1. 「/etc/systemd/system/<ユニットファイル名>.d/」にデフォルトのユニットファイルとの差分のみが記載された差分ファイルを用意する。
  2. 「/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」に自動的に保存されます。

2の方法の具体的な説明ですが、「systemctl edit」コマンドに「–full」オプションを追加して実行します。コマンドを実行すると、エディタが立ち上がるため、以下のように差分を記載して、保存・終了します(ここでは記録間隔を1分に変更しています)。本設定は「/etc/systemd/system/sysstat-collect.timer」に自動的に保存されます。

「systemd」で管理されているユニットファイルに変更が発生した場合、通常は「systemctl daemon-reload」コマンドを実行して変更を反映する必要がありますが、「systemctl edit」コマンドで設定変更する場合は不要です。

「sa」ファイルの性能情報を「sar」ファイルに記録する時間を変更する

「sar」ファイルは、「sa」ファイルの性能情報をテキスト形式に変換して記録したファイルです。「sar」ファイルの作成は1日1回行われます。

作成時間は「/usr/lib/systemd/system/sysstat-summary.timer」に記載されており、デフォルトでは、00時07分になっています。(設定変更の方法は前章を参考にしてください)

その他の設定変更(/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」ファイルを自動で作成するか指定します。(デフォルト:自動で作成する)

以上、ここまで。

この記事を書いた人

目次