Webサービスやアプリ、apiサーバーを運用 & 開発している人は
本番環境のサーバーがどれ位の処理を捌けるか気になるところですね。
リリース前のサービスに負荷テストを掛けてリクエスト数の計測をしたり
その他、Web Frameworkを選ぶ時も
ベンチマークを参考にして決める人も少なくないと思います。
サーバーのパフォーマンスチェックには ”ApachBench (ab)” を使って
パフォーマンスを計測するのが一般的ですが、
もう少し軽快に動作するベンチマークツールが「boom」です。

boomはGoで作らたhttp serverベンチマークツールで、コマンドライン上で使用できます。
Apache Benchよりも動作が早く、結果もシンプルに表示されます。

それでは導入してみましょう!
( * 動作確認にはMac OS, Go ver1.5.3で行いました )
インストールも簡単で下記のコマンドをターミナル上で打つだけで導入されます。
# Goのバージョン1.3以上がインストールされてる必要があります
go get github.com/rakyll/boom
もし、Goのインストールがされていない場合、
Mac OSをお使いの方はhomebrewでもインストールも出来ます。
# goのインストール
$ brew install go
#### ここからはLinux共通 #####
# フォルダの作成
$ mkdir ~/go
$ vim .bashrc
# .bashrcにGOのPATHを通す設定を書きます
export GOPATH=~/go
export PATH=$PATH:$GOPATH/bin
# 編集が終われば.bashrcの内容を反映させる
source ~/.bashrc
正しくインストール & GOPATHの設定がされていると"boom" コマンドが使えるようになります。
$ boom
Options:
-n Number of requests to run.
-c Number of requests to run concurrently. Total number of requests cannot
be smaller than the concurency level.
-q Rate limit, in seconds (QPS).
-o Output type. If none provided, a summary is printed.
"csv" is the only supported alternative. Dumps the response
metrics in comma-seperated values format.
...
使い方もabとよく似ており、一度でも使ったことがある人なら操作に戸惑うことも無いと思います。
boom [オプション] url
オプションも多数されており、結果をCSVファイルで出力したり
ベンチ計測をする際のCPUコア数も設定できます。
Options:
-n リクエストの回数
-c アクセスするクライアントの人数 (リクエスト回数より少ない必要があります)
-q アクセスリミット (秒) *任意
-o もし"csv"のオプションが入っていればcsvファイルとし発行 *任意
-m HTTPメソッド, GET, POST, PUT, DELETE, HEAD, OPTIONS.
-h カスタムHTTPヘッダ, name1:value1;name2:value2.
-t タイムアウト (ミリ秒)
-A HTTP Accept header.
-d HTTP request body.
-T Content-type, デフォルトでは "text/html".
-a ベーシック認証, username:password.
-x HTTP Proxy アドレス as host:port.
-readall リクエストする際のbodyを全て含む
-allow-insecure TLS/SSL 認証のbad/expiredを許可
-disable-compression 圧縮を使用しないで実行
-disable-keepalive keep-aliveを使用しない (TCP接続の再利用を防ぐため)
-cpus ベンチ計測する歳のCPUのコア数を指定 (デフォルトは1core)
実際に使う時は幾つかオプションを付けると思うので、下記の様になるのでは。
$ boom -n 300 -c 30 -disable-keepalive -cpus 2 http://something-url-request-test.test/
# 30人が合計300回のリクエスト
# keep-aliveを無効
# cpuを2コア使うように指定
全く同じベンチマークをApach Benchとboomを使って計測しましたが、
同じテストに関わらず約2秒間、boomのほうが早い結果がでました。
特に大規模なテストを行う時に向いていそうですね!
( boomのほうがデフォルトのオプションが少ないので軽快に動作したと思われます )
このboomは元々pythonで作られた計測ツールで
オリジナルのboomをフォークしてGoで作りなおされたそうです。
( オリジナル版はライブラリやpythonのバージョンに依存していた為 )
実際に導入して使用してみましたが、Apache Benchの代替としても十分使えるので
シンプルで軽いベンチ計測ツールをお探しの方は是非チェックしてください!
GitHub: rakyll/boom