Linuxでシステムに対して意図的に高負荷をかけたい場合

Tulip field

今更感があるかもしれませんが紹介。
stressコマンドを使うと、CPUやメモリ、ディスクに対して意図的に負荷を与えることができます。


どこで使うかというと、、、高負荷時のシステムの挙動を見たい場合、AutoScaling等の負荷状況に応じて自動でスケールアップ/アウトさせるための仕組みのテストをしたい場合、部屋が寒いときにPCに発熱させたい場合wwwなどで使えるのかな、と。

Stressをインストール

CentOSやRedHatの場合は、DAG(rpmforge)のリポジトリがあるので、ここのパッケージからインストールしましょう。
DAGをyumのリポジトリに追加する場合は、以下リンクから(CentOS5[x86_64]系の2010/05/14時点の最新版は)"rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm"をダウンロードして、rpmインストールしましょう。


その後、以下コマンドでstressをyum経由でインストールするだけです。

# yum install stress

負荷をかけてみる

最初に書いておくと、やりすぎるとシステム(OS)がハングアップしてしまうので要注意ですよ!

・・・さて、例えば、以下のコマンドを実行してみます。

$ stress --cpu 4 --timeout 1m

上記のコマンドは、"--cpu"オプションを用いて4プロセス分forkし、1分間"sqrt()"を実行するというもの。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4045 nami      25   0  6236  204  124 R 100.0  0.0   0:07.66 stress
 4044 nami      25   0  6236  204  124 R 100.0  0.0   0:07.68 stress
 4046 nami      25   0  6236  204  124 R 100.0  0.0   0:07.66 stress
 4047 nami      25   0  6236  204  124 R 100.0  0.0   0:07.65 stress

topコマンドで確認すると↑のような感じです。


他にも、いくつかオプションがあり、sync()を実行する"--io"オプションや、malloc()を実行する"--vm"オプション、write()を実行する"--hdd"オプションがあります。


例えば、ディスクI/Oの負荷をかける場合は、以下のような感じ。

$ stress --hdd 1 --timeout 30s


vmstatコマンドで、状況を確認すると以下のような感じ。

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  2      0 6229932  76080 1076692    0    0    16 374836  808  670  0 19 72  9  0
 1  3      0 6038228  76264 1261852    0    0     4     0 1218  878  0 11 71 18  0
 0  2      0 6109900  76360 1194204    0    0     4 65692  976  790  0  7 71 22  0
 0  2      0 6247292  76360 1063260    0    0     0 135772 1095  870  0  1 74 25  0
 0  2      0 6382700  76360 934216    0    0     0 138504 1120  802  0  1 74 24  0


以下のような感じで組み合わせてもOKです。

$ stress --cpu 4 --vm 4 --vm-bytes 2G --timeout 1m


その時をtopコマンドで状況を確認すると以下のような感じ。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 3942 nami      22   0  6236  200  124 R 51.3  0.0   0:02.02 stress
 3944 nami      25   0  6236  200  124 R 51.3  0.0   0:01.95 stress
 3947 nami      25   0 2054m 1.7g  192 R 51.3 23.0   0:01.94 stress
 3943 nami      25   0 2054m 1.6g  192 R 49.3 21.4   0:01.89 stress
 3946 nami      25   0  6236  200  124 R 49.3  0.0   0:01.75 stress
 3945 nami      25   0 2054m 1.6g  192 R 47.3 21.0   0:01.76 stress
 3948 nami      25   0  6236  200  124 R 47.3  0.0   0:01.78 stress
 3949 nami      25   0 2054m 1.5g  192 R 47.3 19.6   0:01.67 stress

Stressコマンドのオプション一覧

引用で貼り付けておきます。

$ stress --help
`stress' imposes certain types of compute stress on your system

Usage: stress [OPTION [ARG]] ...
 -?, --help         show this help statement
     --version      show version statement
 -v, --verbose      be verbose
 -q, --quiet        be quiet
 -n, --dry-run      show what would have been done
 -t, --timeout N    timeout after N seconds
     --backoff N    wait factor of N microseconds before work starts
 -c, --cpu N        spawn N workers spinning on sqrt()
 -i, --io N         spawn N workers spinning on sync()
 -m, --vm N         spawn N workers spinning on malloc()/free()
     --vm-bytes B   malloc B bytes per vm worker (default is 256MB)
     --vm-stride B  touch a byte every B bytes (default is 4096)
     --vm-hang N    sleep N secs before free (default is none, 0 is inf)
     --vm-keep      redirty memory instead of freeing and reallocating
 -d, --hdd N        spawn N workers spinning on write()/unlink()
     --hdd-bytes B  write B bytes per hdd worker (default is 1GB)
     --hdd-noclean  do not unlink files created by hdd workers

Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).

参考

詳細なリファレンスは以下のWebサイトから。実行(オプション指定)例も記載されています。


キャパシティプランニング ― リソースを最大限に活かすサイト分析・予測・配置

キャパシティプランニング ― リソースを最大限に活かすサイト分析・予測・配置

  • 作者:John Allspaw
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/03/19
  • メディア: ペーパーバック