ちょっとした負荷試験をしたい場合に、abが入っていればいいのですが、そうも行かない場合も多いので、go製で簡単にインストールできる hey を試します。
負荷ツールのタイプは2種類ある
HTTPの負荷ツールには2タイプあります。
簡単にするため、
は
全力タイプ
は
定量タイプ
とこの記事では呼んでみますw
全力タイプ
には、この記事で紹介する hey や、 ab(ApacheBendh)などがあります。
定量タイプ
には、Gatling や、以前私が記事を書いた Vegeta などがあります。
アプリケーションがどこまで耐えられるか死ぬまで殴るというテストの際には 1. の全力タイプ、 メモリリークや長期の動作の確認などのためのテストの際には 2. の定量タイプなどを利用する場合が多いと思います。
heyのインストール
heyはgo製ツールなので、goがインストールされた環境で以下のコマンドで簡単にインストールすることができます。
go get -u github.com/rakyll/hey
単純なGETリクエストをしてみる
単純なGETリクエストをしてみます。
hey https://chidakiyo.example.com // URLはサンプルです
結果はこんな感じ
Summary: Total: 0.2199 secs Slowest: 0.1970 secs Fastest: 0.0055 secs Average: 0.0539 secs Requests/sec: 909.5376 Response time histogram: 0.005 [1] | 0.025 [149] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.044 [0] | 0.063 [0] | 0.082 [0] | 0.101 [0] | 0.120 [0] | 0.140 [0] | 0.159 [0] | 0.178 [0] | 0.197 [50] |■■■■■■■■■■■■■ Latency distribution: 10% in 0.0068 secs 25% in 0.0073 secs 50% in 0.0080 secs 75% in 0.1895 secs 90% in 0.1921 secs 95% in 0.1939 secs 99% in 0.1969 secs Details (average, fastest, slowest): DNS+dialup: 0.0241 secs, 0.0055 secs, 0.1970 secs DNS-lookup: 0.0169 secs, 0.0000 secs, 0.0693 secs req write: 0.0001 secs, 0.0000 secs, 0.0017 secs resp wait: 0.0291 secs, 0.0050 secs, 0.1010 secs resp read: 0.0004 secs, 0.0001 secs, 0.0021 secs Status code distribution: [200] 200 responses
パラメータに関して
先程 hey https://chidakiyo.example.com
という形で実行していますが、default値によるアクセス数(並列数)でリクエストが実行されています。
オプションはほぼabと同じ(ような気がしている)で、
-n
オプションが送信するリクエスト数(デフォルトは200)
-c
オプションが並列に実行する数(デフォルトは50)
となるので、オプションを省いても以下のコマンドと等価になります。
hey -n 200 -c 50 https://chidakiyo.example.com
その他オプションはこのような感じになります。
-q
レートリミット。 最初に全力タイプとしていましたが、定量タイプとしても使えるようです。(デフォルトは設定されていません)
-z
期間指定。 -z 10s, -z 3m などのように実行する期間を指定できます。
-o
出力タイプ。 -o csv とすることでCSVでの出力もできます。
-m
HTTP method。 GETのサンプルを実行していますが、POST, PUT, DELETE, HEAD, OPTIONSも実行できます。
-H
HTTP Header。 HTTPヘッダーを付与することができます。
-t
リクエストごとのタイムアウト。(デフォルトは20秒、0で無限とできる)
-A
HTTP Accept header。
-d
HTTP Request body。
-D
HTTP Request body をファイルから入力する。
-T
Content-type。
-a
Basic認証 username:password の形式で渡す
-x
HTTP Proxy
-h2
HTTP/2 を有効化する
そんなかんじ。