h2loadで簡単にパフォーマンス測定を行う
Webサービスのベンチマークやパフォーマンス測定を行う時にApacheBench(ab)を利用していました。
abはApacheをインストールする際に標準で付属するツールなのですが、CentOSなどにインストールしたabではhttpsのプロトコルに対応していないためか、利用できない事が多々ありました。
httpsプロトコルを使ったベンチマークをcliで簡単に行う方法を探していた時にたどり着いたツールがh2loadです。h2loadはnghttp2というライブラリに付属するツールです。
h2loadのインストール方法
Macではbrew、CentOSではyumを使ってインストールする事ができました。
# Mac
brew install nghttp2
# CentOS7
yum install nghttp2
利用方法
基本的なことだけするのであればabと同じ様なオプションで利用する事ができます。
例えば以下のコマンドを実行すると、対象のURLに対して100並行で合計1000リクエストを送る事ができます。
h2load -n 1000 -c 100 https://xxxxxxxxxxxxxxxx.jp/
abとの基本的なオプションの比較
オプション | h2load | ab |
---|---|---|
リクエスト数 | -n | -n |
同時実行数 | -c | -c |
スレッド数 | -t | not supported |
ヘッダー追加 | -H | -H |
Postリクエストのデータ付与 | -d | -p |
HTTP/1.xを使ったリクエスト | -h1 | default supported |
HTTP/2を使ったリクエスト | default supported | not supported |
h2loadやabを使う場合にはどの様なクエリを投げると良いか調べる必要があると思います。 そんな時にはChromeのデベロッパーツールを利用すると一手間省けるかもしれません。 Chromeのデベロッパーツールではcurlのリクエストを自動生成してくれる機能があり、これを使う事でリクエストの内容をcurlコマンドに落とし込む事ができます。 それを元にどのようなパラメータが必要か割り出す事でh2loadのリクエストに変換する事ができます。 ![](https://blog.varlog.dev/images/h2load-usage-8C1450DF-EE66-4E07-8533-4F3C4E13E699.png)
まとめ
h2loadはHTTPSやHTTP/1.x・2共にサポートしており、単純なパフォーマンステストにはとても便利なツールなのでどんどん使っていきましょう。
ただし、h2loadにもできない事があり、例えば複数のページ遷移を表現したりする事はできません。そのようなシナリオが必要になる場合は例えばJMetterやGatlingなど、もっと高機能なツールをオススメします。
※h2loadやabはDOS攻撃にも使えるツールのため、使用の際は注意してください。