end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

sarによるボトルネック発見の手順(というかsysstatの使用法)をまとめてみた

sar で収集したリソース使用情報が sadf コマンドで TSV として出力

(2014/8/6追記)
sar で収集したリソース使用情報が sadf コマンドで TSV として出力できる - 宮川拓の日記
↑全く知りませんでした

私がよく利用するoption (2013/8/6追記. よく忘れるので)

$ sar -r -s 00:00:00 -e 01:00:00 -f /var/log/sa/sa03
オプション 内容
-q load average $ sar -q
-u cpu使用率 $ sar -u
-b I/O回数とデータ量 $ sar -b
-r メモリとスワップ使用率 $ sar -r
-s 開始時間 $ sar -s 00:00:00
-e 終了時間 $ sar -e 03:00:00
-f 日付 ※ $ sar -f /var/log/sa/sa03

※「/etc/sysconfig/sysstat」に/var/log/sa/sa〜 の保持期間を最大31日設定可

最近では、dstat や htop もありますが...

vmstat, iostat, ifstat, netstat 等を統合した dstat や topコマンドの強化版 htopもありますが
http://htop.sourceforge.net/
DAG: Dstat: Versatile resource statistics tool

sarは過去に遡って調べられるので、スキ

sar (sysstat)は、cpu使用率ロードアベレージ、ディスクio等を表示できるコマンドです。
同様のコマンドにuptimeやvmstat、iostatがありますが、これらのコマンドと異なり、sarは過去に遡って表示できるので、
私の場合、過負荷が発生した場合、まずsarの出力結果を確認しています。

これまでにsarに関連するエントリは何度か書いていますが、installや使用方法等を一度、整理しておきます。

linuxチューニング (proc, sar, top でcpuボトルネックの調査)
http://d.hatena.ne.jp/end0tknr/20080626/1214473350

あくまで私なりの見方ですが...

sar (sysstat)のinstall

私の場合、yumでインストールしましたが、 sourceforgeからsrcも取得できるようです。

# yum -y install sysstat

http://sourceforge.jp/projects/freshmeat_sysstat/releases/

主要オプション

-qオプション : 実行キュー長さと、ロードアベレージ

uptimeコマンドと、ほぼ同じですよね。

$ sar -q -e 07:00:00
00時00分01秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
00時10分01秒         6       365      1.00      1.02      1.00
00時20分01秒         6       355      1.07      1.02      1.00
00時30分01秒         6       355      1.00      1.00      1.00
runq-sz 実行キューの長さ(実行待ちのプロセス数)
plist-sz プロセス数リストにあるプロセスとスレッド数
ldavg-1 過去1分間のロードアベレージ
ldavg-5 過去5分間のロードアベレージ
ldavg-15 過去15分間のロードアベレージ
-q(ロードアベレージ) を見る上でのポイント

ロードアベレージの上昇は
「他のプロセスの空き待ち(CPU負荷)」「ディスクIO待ち」が原因に考えられますが

  • qオプションの結果だけで、これらは切り分けられません。

そこで、次に-uオプションでCPU使用率を確認します。

-uオプション : CPU使用率
$ sar -u -e 07:00:00
00時00分01秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
00時10分01秒       all      6.23      0.00      0.05      0.00      0.00     93.71
00時20分01秒       all      6.34      0.00      0.06      0.00      0.00     93.61
00時30分01秒       all      6.23      0.00      0.04      0.00      0.00     93.72
%user アプリケーション実行による
%nice niceコマンドで優先度変更したアプリケーション実行による
%system カーネル実行による
%iowait CPUのディスクIO待ち状態(アイドル状態)
%steal ゲストOSのリソース要求にも関らず、割当てられなかった時間
%idle CPUのディスクIO待ちを除くアイドル状態

※「%steal」は次のurlも参考になります。 http://d.hatena.ne.jp/mir/20080407/p1

-u(CPU使用率) を見る上でのポイント
%userが高い アプリケーションに問題、またはメモリ不足の可能性
%iowait I/O装置の性能で、%systemも高い可能性があります
-bオプション : I/Oの回数とデータ量
$ sar -b -e 07:00:00
00時00分01秒       tps      rtps      wtps   bread/s   bwrtn/s
00時10分01秒      7.10      0.00      7.10      0.00    178.17
00時20分01秒      6.46      0.00      6.46      0.00    239.59
tps IOリクエスト数/秒
rtps read IOリクエスト数/秒
wtps write IOリクエスト数/秒
bread/s read IOリクエストのデータ量/秒(ブロック単位)
bwrtn/s write IOリクエストのデータ量/秒(ブロック単位)
-rオプション : メモリとスワップの使用率
$ sar -r -e 07:00:00
00時00分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
00時10分01秒  19473932  13472512     40.89    635576  11255848  37728644         0      0.00         0
00時20分01秒  19477944  13468500     40.88    635684  11259608  37728644         0      0.00         0
00時30分01秒  19473524  13472920     40.89    635692  11263196  37728644         0      0.00         0
kbmemfree メモリ空き容量(kb)
kbmemused メモリ使用量(kb)
%memused メモリ使用率
kbbuffers カーネルによるバッファとしての使用量(kb)
kbcached カーネルによるキャッシュとしての使用量(kb)
kbswpfree スワップ空き容量(kb)
kbswpused スワップ使用量(kb)
%swpused スワップ使用率
kbswpcad キャッシュされたスワップメモリ量(kb)

※ kbswpcad は次のurlも参考になります。 http://www.syboos.jp/linux/doc/sar-command.html
※ 実質メモリ使用量 = kbmemused - ( kbbuffers + kbcached )

その他のオプション

このあたりのオプションは、殆ど使ったことがありませんが...

-B ページング(page in/out等)
-c process creation...って何?
-d 各ブロックデバイスの使用状況
-R メモリの使用状況(増減を表示)
-v iノードやファイル、カーネルテーブル?の状況
-w system switching activity...って何?
-W スワップin/out
-y TTY装置?の使用状況

日時を指定して実行

sarは /var/log/sa以下に日別logを持つので、開始時間(-s hh:mm:dd)や終了時間(-e hh:mm:dd)と合わせて次のように実行できます。

$ sar -r -s 00:00:00 -e 01:00:00 -f /var/log/sa/sa03
00時00分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
00時10分01秒  19911020  13035424     39.57    631856  10845236  37728644         0      0.00         0
00時20分01秒  19911804  13034640     39.56    631940  10845316  37728644         0      0.00         0
00時30分01秒  19912316  13034128     39.56    631940  10845384  37728644         0      0.00         0
00時40分01秒  19911132  13035312     39.57    631940  10845500  37728644         0      0.00         0
00時50分01秒  19911860  13034584     39.56    631940  10845564  37728644         0      0.00         0
平均値:       19911626  13034818     39.56    631923  10845400  37728644         0      0.00         0