負荷試験などでボトルネックを特定する (sarコマンド)
[履歴] [最終更新] (2020/07/02 22:19:16)
プログラミング/IoT の関連商品 (Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。)
最近の投稿
注目の記事

概要

sysstatというパッケージに含まれる "sar" (System Admin Reporter) コマンドを利用すると、PCの各リソースの使用状況を表示することができます。これは、負荷試験などでボトルネックを特定するために役立ちます。

使い方

インストール例

$ yum install sysstat

インストールされたrpmパッケージ

$ rpm -qa | grep sysstat
sysstat-9.0.4-22.el6_5.1.i686

cronが自動設置されたことが確認可能 (rpmについてはこちらをご参照ください)

$ rpm -ql sysstat-9.0.4-22.el6_5.1.i686 | grep cron
/etc/cron.d/sysstat

sarコマンドでは過去のシステムの状況を確認できます。その際に参照するログをcronで取得しているのです。取得間隔を変更するためには

$ vi /etc/cron.d/sysstat

を編集します。ログを参照するには単に

$ sar

と実行すればよいです。manなどでも参照可能な後述のオプション "-u" や "-q" も指定可能です。

数秒間隔でリアルタイムに調査

過去の情報を参照するだけでなく、リアルタイムに現在のシステムの使用状況をレポートできます。

$ sar 1 5

とすると1秒間隔で5秒間出力します。

Linux 2.6.32-431.23.3.el6.i686 (localhost.localdomain)  2014年10月24日  _i686_  (1 CPU)
00時39分11秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00時39分12秒     all      0.00      0.00      1.00      0.00      0.00     99.00
00時39分13秒     all      0.00      0.00      0.00      0.00      0.00    100.00
00時39分14秒     all      0.00      0.00      1.00      0.00      0.00     99.00
00時39分15秒     all      0.00      0.00      0.00      0.00      0.00    100.00
00時39分16秒     all      0.00      0.00      0.00      0.00      0.00    100.00
平均値:      all      0.00      0.00      0.40      0.00      0.00     99.60

CPU使用率

オプションを指定しなかった場合は "-u" を指定したことと同じ内容が出力されます。つまり "sar 1 1 -u" と "sar 1 1" は同義です。「%user」はユーザのプロセスがCPUを使用している時間の割合 (CPU使用率) です。「%system」はシステムプロセスのCPU使用率です。「%iowait」はCPUがI/Oへの読み書きを待っている時間の割合です。「%idle」はCPUが使用されていない時間の割合です。

$ sar 1 1 -u
00時53分33秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00時53分34秒     all      0.00      0.00      0.00      0.00      0.00    100.00
平均値:      all      0.00      0.00      0.00      0.00      0.00    100.00

ディスクへの読み書き

「tps」は "transfers per second" の略で、一秒あたりのI/O読み書きリクエスト数です。「rtps」と「wtps」はそれぞれ read と write で、合計すると "tps" と等しくなります。「bread/s」は "blocks read per second" の意味で、一秒あたりに read されたブロック数です。「bwrtn/s」は "blocks written per second" の意味で、一秒あたりに written されたブロック数です。ブロックについてはこちらのページをご参照。

$ sar 1 1 -b
01時01分19秒       tps      rtps      wtps   bread/s   bwrtn/s
01時01分20秒      0.00      0.00      0.00      0.00      0.00
平均値:       0.00      0.00      0.00      0.00      0.00

CPUの使用を要求しているタスク数

CPUの使用を要求しているタスク (実行待ちまたは実行中) の平均個数をロードアベレージとよび、PCのCPUコア数よりも高くなると処理ができず、実行待ちプロセスが発生します。「runq-sz」は "run queue size" の意味で、実行待ち状態のタスク数です。「ldavg-N」は過去 N 分前までの load average の平均値です。

$ sar 1 1 -q
01時20分39秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
01時20分40秒         0        95      0.00      0.00      0.00
平均値:          0        95      0.00      0.00      0.00

メモリの使用状況

例えば「%memused」でメモリ使用率が確認できます

$ sar 1 1 -r
01時25分27秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
01時25分28秒    354440    156384     30.61      9332     82420    198784     12.75
平均値:     354440    156384     30.61      9332     82420    198784     12.75

すべての情報をファイルに書き出して後で解析する

"-o" ですべての情報のファイル出力ができます。これを1時間実行してみます。

$ sar -o output.txt 1 3600

負荷試験などが完了したあとで、このファイルを参照すればよいのです。

$ sar -f output.txt -u
$ sar -f output.txt -b
$ sar -f output.txt -q
$ sar -f output.txt -r

しきい値は 40 % を基準に考える

二重に冗長化した場合は 40% が基準になります。冗長化したホストのうち、どちらかが落ちたとしても 80% 程度になるため耐えられます。

過去の日付を指定

/var/log/sa/ に保存されているファイルを指定することで、直近の X 月 YY 日 の情報を利用できます。

$ sar -f /var/log/sa/saXX -u
$ sar -f /var/log/sa/saXX -b
$ sar -f /var/log/sa/saXX -q
$ sar -f /var/log/sa/saXX -r

これらの情報はテキストファイルでも保存されています。

$ less /var/log/sa/sarXX

CPU クロック周波数

sar -m CPU 1
関連ページ
    概要 「何とかstat」というコマンドがたくさんあります。よく使うものの基本的な使用方法をまとめます。 iostat (I/Oデバイスの統計情報) システムが認識する各デバイスのI/Oの使用状況を調査するコマンドです。補足情報としてCPUの使用状況「%user, %system, %iowait, %idle」も合わせて出力されます。それらの意味については
    コマンドのエイリアスを登録する (update-alternatives) mybin という名前のコマンドを登録 sudo update-alternatives --install /usr/local/bin/mybin mybin /usr/bin/echo 10 sudo update-alternatives --install /usr/local/bin/mybin mybin