今更感があるかもしれませんが紹介。
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
- メディア: ペーパーバック