モダンで簡易なHTTP負荷テストツール vegeta
去年書いた記事を投稿してみようと思います。
HTTP(S)負荷テストツールの紹介をしたいと思います。
一般的なHTTP負荷テスト
お手軽にやるなら ab か http_load を使うのが一般的です。 それとも、ちょっと手間をかけて JMeter ですか?
ただ、 ab は1つのURLに対してしか負荷をかけられないし、http_loadはHTTPSのテストがちゃんと出来ない欠点があります。 JMeterはそもそも導入からセットアップまでに時間がかかってあんまりお手軽という感じではないですよね。
そこで今日紹介するのが vegeta
です。
what's vegeta
tsenart/vegeta まずはgithubのリポジトリをみてみましょう。
READMEにこの画像がある時点でお察しですね。
ドラゴンボールのベジータから名前をとったツールです。
vegetaはpython界隈で静かなブームの go
で書かれています。
how to use
vegeta を使うには2通り方法があります。
1つめの方法は Mac向けと Linux向けのビルドが用意されているのでそれぞれの環境に合わせたものを取得して使って下さい。詳細は割愛します。 そんなに難しくないのでなるべく自力でビルドしましょう。
how to build
下の手順でビルド出来ます。
$ git clone git@github.com:tsenart/vegeta.git $ cd vegeta $ export |grep GO GOPATH=/usr/local/Cellar/go/1.1.1/bin GOROOT=/usr/local/Cellar/go/1.1.1 % go build -o vegeta
たったこれだけの手順でビルド出来ます。 go言語だとC/C++みたいにヘッダーファイルが足りないとかはほとんど言われません。
ただし、goのインストールとGOPATHの設定で詰んだらビルド済みのファイルを持ってきましょう。 Goの特徴としてビルドされたファイルは共有オブジェクトへの依存がありませんので一度ビルドしてしまえばビルド済みのファイルはどの環境でも動きます。なので、誰かがビルドしたものが自分の環境でも簡単に動きます。
Usage
vegeta
の実行ファイルが用意できたら次はテストするURLのリストファイルを作成します。
書式は次のような感じです。
<METHOD> <URL>
GET http://goku:9090/path/to/dragon?item=balls GET http://user:password@goku:9090/path/to HEAD http://goku:9090/path/to/success
# 秒間100リクエストで60秒間負荷をかけます。 $ vegeta attack -rate=100 -duration=60s -targets=targets.txt > results.vr 2013/12/18 23:32:16 Vegeta is attacking 3 targets in random order for 1m0s... 2013/12/18 23:33:16 Done! 2013/12/18 23:33:16 Writing results to 'stdout'...
いまどきのCPUをたくさん積んだサーバーで vegeta を使うときは -cpus
オプションを使ってあげると利用するCPUの数が指定出来るので他にプロセスが動いているサーバーで負荷検証する場合などにリソースを食いつぶさないために利用します
# 秒間1000リクエストで60秒間負荷をかけます。 $ vegeta -cpus=3 attack -rate=1000 -duration=60s -targets=targets.txt > results.vr
結果の確認
結果をみるためには3つの方法が用意されてます。
- text
- json
- graph
まず、textで見るには次のようにします。
$ ./vegeta report -input=results.vr Requests [total] 600 Duration [total] 59.900390483s Latencies [mean, 95, 99, max] 537.261629ms, 1.622298507s, 1.742493283s, 1.742493283s Bytes In [total, mean] 14680738, 24467.90 Bytes Out [total, mean] 0, 0.00 Success [ratio] 100.00% Status Codes [code:count] 200:600 Error Set:
jsonで結果を見るには次のようにします。
$ ./vegeta report -input=results.vr -reporter=json > metrics.json
プロットした形で見るには一旦htmlを作ってからブラウザで確認してあげましょう。 個人的にはpythonのSimpleHTTPServerが手軽で便利です。
$ cat results.vr | ./vegeta report -reporter=plot > plot.html $ python -mSimpleHTTPServer Serving HTTP on 0.0.0.0 port 8000 ...
http://localhost:8000/plot.html
パラメータに関する注意
ベンチマークの測定時間を1秒にするような例がありますが一瞬の負荷ならなんとか持ちこたえるサーバーがよくあるのでちゃんと分単位で最低でも30分以上は一定の負荷をかけ続けてベンチマークを取りましょう。
http://qiita.com/morikat/items/271c8b40fe1d6dc7e75c
サーバーのログローテーションなどのcronのタイミングとピークのリクエストが重なることでリクエストが正常に完了しないということがよくあります。 そういった現象を確認するためにもベンチマークを取るときは長めに行うのが鉄則です。
まとめ
というわけど、vegeta の紹介をしてみました。 Goのコードは一度ビルドしてしまえば同じOS・同じCPUの環境にはscpしてあげるだけで動くのでyinstパッケージを入れるよりもずっと手軽です。
2013年はへび年、つまり python
の年でしたが
2014年は golang
の年になると思います。
みなさんも来年は Go
を覚えるとハッピーになれると思います。
- 作者: 古川昇
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- クリック: 7回
- この商品を含むブログ (6件) を見る