sar(sysstat)によるボトルネック特定

##sar(sysstat)とは
LoadAverageやCPU使用率、ディスクI/Oの状態を表示できるコマンド。
何より便利なのは、過去にさかのぼれる点。

##sarのインストール

```
# yum install sysstat
```

インストールすると、ログを取り始めます。

##sarのログ取得間隔の変更

/etc/cron.d/sysstat を編集します。

```
$sudo vi /etc/cron.d/sysstat 
# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
```
デフォルト10分間隔（*/10）になっているので、好みの間隔に変更。


##主要コマンド一覧

|コマンド|内容|
|:-----------|------------|:------------:|
|sar -q|loadaverage|
|sar -u|CPU使用率|
|sar -b|I/O|
|sar -r|メモリとスワップ使用率|
|sar -s time|指定時間以降のデータ|
|sar -e time|指定時間までのデータ|
|sar -f /var/log/sa/sa01| 日付別の過去データ|



##-qでLoadAverageをチェック


```sh
$ sar -q -s 21:00:00
21時00分01秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
21時05分01秒         1       203      0.19      0.20      0.16
21時10分01秒         0       203      0.21      0.18      0.17
21時15分01秒         2       209      0.11      0.18      0.17
21時20分01秒         1       208      0.38      0.20      0.18
21時25分01秒         0       210      0.10      0.20      0.18
平均値:          1       207      0.20      0.19      0.17
```
ldavg-xが、過去x分間のLoadAverageを示します。

##LoadAverageの上昇が見られたら

基本的に、

 - CPU負荷（プロセス不足）
 - I/O負荷

のどちらかに切り分けられます。

##-uでCPU使用率をチェック

```sh
$ sar -u -s 21:00:00

21時00分01秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
21時05分01秒       all     11.42      0.00      3.89      0.16      0.00     84.52
21時10分01秒       all     11.32      0.00      3.44      0.45      0.00     84.79
21時15分01秒       all     10.74      0.00      3.41      0.20      0.00     85.64
21時20分01秒       all     10.26      0.00      3.29      0.13      0.00     86.32
21時25分01秒       all     10.81      0.00      3.60      0.15      0.00     85.44
21時30分01秒       all      9.41      0.00      3.03      0.17      0.00     87.39
平均値:        all     10.66      0.00      3.44      0.21      0.00     85.68

```

sar -uは、CPUがどのようなモードになっていたのか、
それぞれのモードの割合を示してくれる。

|モード|内容|
|:-----------|------------|:------------:|
|%user|アプリケーション（ユーザプロセス）が使用している状態|
|%system| カーネル（OSなど）が使用している状態 |
|%iowait| ディスクI/O待ち状態|
|%idle | CPUが何の処理もしない待機状態（I/O待ちの時間は除く）|

※steal、niceは省きます。詳細は下部の参考を参照ください。


##sar -u から分かること
#### %userか%systemが高いと・・・CPUボトルネック（もしくはメモリ不足）
（%userならアプリケーション側。%systemならカーネル側。）

#### %iowaitが高いと・・・ディスクI/Oボトルネック。


##-bでディスクI/O状況をチェック
```
$ sar -b -s 21:00:00
21時00分01秒       tps      rtps      wtps   bread/s   bwrtn/s
21時05分01秒     15.67      0.00     15.67      0.00    363.44
21時10分01秒     15.42      0.00     15.42      0.00    389.58
21時15分01秒     16.25      0.00     16.25      0.00    355.18
21時20分01秒     13.50      0.00     13.50      0.00    313.71
21時25分01秒     15.98      0.00     15.97      0.05    351.94
21時30分01秒     14.43      0.00     14.43      0.00    313.95
21時35分01秒     13.22      0.00     13.22      0.00    296.66
```
|項目|内容|
|:-----------|------------|:------------:|
|tps|    秒間I/Oリクエスト 数の合計。|
|rtps|   秒間読み込みIOリクエスト数の合計。|
|wtps|    秒間書き込みIOリクエスト数の合計。|
|bread/s|    秒間読み込み（ブロック単位）IOリクエストのデータ量の合計。|
|bwrtn/s|    秒間書き込み（ブロック単位）IOリクエストのデータ量の合計。|

##-rでメモリとスワップの使用状況をチェック

```
$ sar -r -s 21:00:00
21時00分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
21時05分01秒    655456   3388400     83.79    254316   1595220   2152620        80      0.00         0
21時10分01秒    642676   3401180     84.11    254364   1596728   2152620        80      0.00         0
21時15分01秒    598616   3445240     85.20    254376   1598160   2152620        80      0.00         0
21時20分01秒    598744   3445112     85.19    254388   1599628   2152620        80      0.00         0
21時25分01秒    681552   3362304     83.15    254396   1601256   2152620        80      0.00         0
21時30分01秒    548508   3495348     86.44    254416   1602084   2152620        80      0.00         0
```

重要なのは以下でしょうか。

|項目|内容|
|:-----------|------------|:------------:|
|kbmemfree|	メモリ空き容量(kb)|
|kbmemused|	メモリ使用量(kb)|
|%memused|	メモリ使用率|
|kbswpfree|	スワップ空き容量(kb)|
|kbswpused|	スワップ使用量(kb)|
|%swpused|	スワップ使用率|




##過去データを日時指定して実行

例えば当月15日の23:30以降のデータを見たい時は・・

```
$ sar -u  -s 23:30:00 -f /var/log/sa/sa15

23時30分01秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
23時35分01秒       all      7.20      0.00      2.39      0.17      0.00     90.24
23時40分01秒       all      8.35      0.00      2.65      0.12      0.00     88.89
23時45分01秒       all      6.76      0.00      2.31      0.10      0.00     90.83
23時50分01秒       all      7.27      0.00      2.36      0.12      0.00     90.25
23時55分01秒       all      8.18      0.00      2.66      0.12      0.00     89.03
平均値:        all      7.55      0.00      2.47      0.12      0.00     89.85
```



##参考
sarコマンド - CPU・ネットワーク・メモリ・ディスク情報確認
http://www.syboos.jp/linux/doc/sar-command.html

sarコマンドの見方
http://linux.alohakeakua.net/archives/488

CPU利用率: stealとは
http://d.hatena.ne.jp/mir/20080407/p1

nice：優先順位を上げてプログラムを実行する
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231193/