Siege(スィージ)は、仮想ユーザを大量に作ってN/Wからのアクセスをシミュレートしてくれる負荷テストツールです。
パッケージ化されているので、yum(RHEL/CentOS系)やapt-get(Debian/Ubuntu系)コマンドで容易に導入できます。
HexaNASのテスト環境に負荷をかけてみたいと思います。
目次
サーバ環境
Platform:FreeBSD 11.0-RELEASE-p7
CPU:AMD Athlon 5370 Quad-Core 2.2GHz
MEM:DDR3 16GB
HDD:250GB ZFS MIRROR
Siegeの主なオプション
| オプション | 意味 |
|---|---|
| -v, -verbose | リクエストの詳細情報を表示。 |
| -q, -quiet | リクエストの詳細情報を非表示。 |
| -c, -concurrent=NUM | 同時接続数。(フォルトは10)。 |
| -i, -internet | --fileを指定した場合にファイル中のURLからランダムでリクエストを送信する。 |
| -b, -benchmark | ベンチマークモードでリクエスト間隔を置かない(デフォルトは1秒間のリクエスト間隔を置く)。 |
| -t, -time=NUMm | テストの時間を指定(S=秒、M=分、H=時間)。 |
| -r, -reps=NUM | 1接続のリクエスト回数。 |
| -f, -file=FILE | URLのリストファイルを指定。 |
| -l, -log[=FILE] | ログファイルのパスを指定する(指定が無い場合には PREFIX/var/siege.log) |
| -d, -delay=NUM | リクエスト間の間隔を指定(デフォルトは1秒) |
結果の見方
| 項目 | 意味 |
|---|---|
| Transactions | 有効リクエスト数 |
| Availability | 成功率 |
| Elapsed time | 全てのリクエスト送信までに要した秒数 |
| Data transferred | データ転送量 |
| Response time | 1リクエスト辺りの平均レスポンスタイム |
| Transaction rate | 秒間リクエスト数 |
| Throughput | 秒間処理データ量 |
| Concurrency | 平均同時接続数 |
| Successful transactions | 成功リクエスト数 |
| Failed transactions | 失敗リクエスト数 |
| Longest transaction | 1リクエスト辺りにかかった最大秒数 |
| Shortest transaction | 1リクエスト辺りにかかった最小秒数 |
サンプル
urls.txt
http://192.168.0.1/images/header_logo.png
http://192.168.0.1/js/jquery.min.js
http://192.168.0.1/css/gui.css
http://192.168.0.1/css/login.css
http://192.168.0.1:8080/phpinfo.php
サーバ192.168.0.1に対し、同時接続数=1,000で60秒間絶え間なくリクエストを送出
$ siege --concurrent=1000 --time=60S --benchmark --internet --file=/tmp/urls.txt --log=/tmp/urls.log
| 項目 | 結果 |
|---|---|
| Transactions | 15681 hits |
| Availability | 100.00 % |
| Elapsed time | 59.12 secs |
| Data transferred | 900.27 MB |
| Response time | 0.94secs |
| Transaction rate | 265.24 trans/sec |
| Throughput | 15.23 MB/sec |
| Concurrency | 249.87 |
| Successful transactions | 15681 |
| Failed transactions | 0 |
| Longest transaction | 9.38 |
| Shortest transaction | 0.00 |
サーバ192.168.0.1に対し、同時接続数=1,000で10要求/接続を送出
$ siege --concurrent=1000 --reps=10 --benchmark --internet --file=/tmp/urls.txt --log=/tmp/urls.log
| 項目 | 結果 |
|---|---|
| Transactions | 10000 hits |
| Availability | 100.00 % |
| Elapsed time | 20.51 secs |
| Data transferred | 575.32 MB |
| Response time | 1.69 secs |
| Transaction rate | 487.57 trans/sec |
| Throughput | 28.05 MB/sec |
| Concurrency | 822.50 |
| Successful transactions | 10000 |
| Failed transactions | 0 |
| Longest transaction | 13.29 |
| Shortest transaction | 0.00 |
サーバ192.168.0.1に対し、同時接続数=1,000で50要求/接続を送出
$ siege --concurrent=1000 --reps=50 --benchmark --internet --file=/tmp/urls.txt --log=/tmp/urls.log
| 項目 | 結果 |
|---|---|
| Transactions | 50000 hits |
| Availability | 100.00 % |
| Elapsed time | 251.33 secs |
| Data transferred | 2886.43 MB |
| Response time | 4.75 secs |
| Transactionrate | 198.94 trans/sec |
| Throughput | 11.48 MB/sec |
| Concurrency | 945.49 |
| Successful transactions | 50000 |
| Failed transactions | 0 |
| Longest transaction | 28.46 |
| Shortest transaction | 0.00 |
1セッションで50接続を要求するシーンはあまり無いでしょうから、1000ユーザは楽に捌けることが分かりました。
ちなみに、CPU・MEMともにMAXで20%前後の消費でした。