kakakakakku blog

Weekly Tech Blog: Keep on Learning!

CPU / メモリ / ディスクに負荷をかける stress コマンド

最近 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 だけではなく,メモリとディスクにも負荷をかけることができる