概要
dstatがサーバの状態を調べるのに便利!というのはよく見るんですが、どこを見ればいいのかしっかり理解してなかったのでサーバの負荷状態を再現しながら見るべきポイントをまとめました。
環境
- Ubuntu 14.04
- dstat 0.7.2
- stress 1.0.1
負荷試験で見るべきポイント
dstatで見れるのは主に1、2です。
インストール
dstatをインストール
$ sudo apt-get install dstat
負荷状態を再現するstress
をインストール
$ sudo apt-get install stress
CPU負荷(user)を上げて確認する
$ stress -c 1
最後の数字はworkerの数です。CPUの個数分指定すると100%CPUを使用できます。
CPU2個で-c 1
なら50%までしか負荷がかかりませんし、-c 4
なら過負荷でロードアベレージが2を超えて4になります。
dstatで見てみましょう。
$ dstat -tcl
見るところ
ファイル書き込みの負荷を上げて確認する
$ stress -d 2 --hdd-bytes 2G
2つのプロセスが2GBずつディスクへの書き込みを行います。
$ dstat -tcdpl
見るところ
- ロードアベレージが高くなっている(待ち処理が増えている)
- processのblockが増えている
- CPUの
wait
が増えている(待ち処理ばかりでCPUが使い切れてない)
メモリ負荷を上げて確認する
vagrant はデフォルトだとスワップを確保していないので準備します。
$ sudo -s # fallocate -l 1024m /tmp/swap.img # mkswap /tmp/swap.img # chmod 600 /tmp/swap.img # swapon /tmp/swap.img
負荷をかけます。-m
オプションをつけると256Mずつメモリを専有します。以下の例では1G使用してます。
$ stress -m 4
確認します。
$ dstat -tcmspl
見るところ
- ロードアベレージが高くなっている(待ち処理が増えている)
- processのblockが増えている
- swapのusedが増えている
- CPUの
wait
が出ている - CPUの
system
が増えている
その他
色分けされてるが何KB使っているのか分かりにくい
--nocolor
オプションを付けると見やすくなります。
before
after
まとめ
負荷状態の理想はI/Oでロードアベレージが上がるのでなく、CPUリソースを使いきっている状態です。
その状態ならスケール可能なシステムと言えるので、サーバを増設すれば負荷が増えても対応できます。