最近 stress
コマンドを使って,サーバに負荷をかける方法を紹介する機会があり,よく使っているのに今までブログに書いていなかったなと気付き,今回まとめることにした.CPU に負荷をかけるだけなら yes > /dev/null
をコア数に合わせて並列実行すれば良いけど,stress
コマンドならメモリとディスクにも負荷をかけることができるので,シナリオのバリエーションを増やすことができる.
インストール
検証環境として CentOS を使った.
$ sudo yum install stress
$ stress --version
stress 1.0.4
共通オプション
以下のような共通オプションが用意されている.よく使うのは --timeout
で,秒数を指定して負荷をかけることができる.他はあまり使ったことがないかも.
-t, --timeout
: 負荷をかける秒数を指定する-n, --dry-run
: 実施に負荷をかけず,期待値を確認する-q, --quiet
: 標準出力を抑制する-v, --verbose
: 標準出力にデバッグ情報まで表示する
CPU に負荷をかける
CPU に負荷をかける場合は --cpu
オプションを使う.引数にコア数を指定するので,/proc/cpuinfo
あたりを見て負荷を調整する.以下は,10秒間 CPU に負荷をかけて dstat
で確認している.
$ stress --cpu 2 --timeout 10 $ dstat -c ----total-cpu-usage---- usr sys idl wai hiq siq 0 0 100 0 0 0 0 0 100 0 0 0 73 0 27 0 0 0 100 0 0 0 0 0 100 0 0 0 0 0 100 0 0 0 0 0 100 0 0 0 0 0 100 0 0 0 0 0 100 0 0 0 0 0 100 0 0 0 0 0 100 0 0 0 0 0 100 0 0 0 0 0 26 0 74 0 0 0 0 0 100 0 0 0 0 0 100 0 0 0
メモリに負荷をかける
メモリに負荷をかける場合は --vm
オプションを使う.1 VM あたりのメモリサイズはデフォルトで 256MB になっているので,変更する場合は --vm-bytes 512M
のように --vm-bytes
オプションと併用する.また,デフォルトの挙動では「メモリ確保 → メモリ解放を繰り返す」ようになっている.
$ stress --vm 1 $ stress --vm 2 $ stress --vm 2 --vm-bytes 512M
以下は,10秒間メモリに負荷をかけて dstat
で確認している.used
の値が「増えて → 減って」を繰り返していることがわかる.
$ stress --vm 2 --timeout 10 $ dstat -m ------memory-usage----- used buff cach free 97.9M 19.2M 442M 3148M 97.9M 19.2M 442M 3148M 328M 19.2M 442M 2918M 158M 19.2M 442M 3088M 396M 19.2M 442M 2850M 137M 19.2M 442M 3109M 445M 19.2M 442M 2801M 194M 19.2M 442M 3051M 500M 19.2M 442M 2745M 245M 19.2M 442M 3000M 545M 19.2M 442M 2700M 312M 19.2M 442M 2934M 98.4M 19.2M 442M 3147M 98.4M 19.2M 442M 3147M
逆に「メモリ確保を維持する」場合には --vm-hang
オプションと併用する.--vm-hang
オプションには維持する秒数を指定することができ,0 を指定すると無期限に維持する.以下は,10秒間メモリに負荷をかけて,確保サイズを 512MB で維持している.
$ stress --vm 2 --vm-hang 0 --timeout 10 $ dstat -m ------memory-usage----- used buff cach free 105M 21.2M 444M 3137M 105M 21.2M 444M 3137M 617M 21.2M 444M 2625M 617M 21.2M 444M 2625M 617M 21.2M 444M 2625M 617M 21.2M 444M 2625M 617M 21.2M 444M 2625M 617M 21.2M 444M 2625M 617M 21.2M 444M 2625M 617M 21.2M 444M 2625M 617M 21.2M 444M 2625M 617M 21.2M 444M 2625M 105M 21.2M 444M 3136M 105M 21.2M 444M 3136M
ディスクに負荷をかける
stress
コマンドではディスク(書き込み)に負荷をかけることができる.その場合は --hdd
オプションを使う.デフォルトの挙動では「書き込み → 削除を繰り返す」ようになっている.書き込みサイズはデフォルトで 1GB になっているので,変更する場合は --hdd-bytes 2G
のように --hdd-bytes
オプションと併用する.あとは dstat -r
で IOPS あたりを確認する.
$ stress --hdd 1 --timeout 10 $ stress --hdd 2 --timeout 10 $ stress --hdd 2 --hdd-bytes 2G
まとめ
- サーバに負荷をかける場合は
stress
コマンドが便利 - CPU だけではなく,メモリとディスクにも負荷をかけることができる