HTTP負荷テストツール「Siege」

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%前後の消費でした。