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との基本的なオプションの比較

オプションh2loadab
リクエスト数-n-n
同時実行数-c-c
スレッド数-tnot supported
ヘッダー追加-H-H
Postリクエストのデータ付与-d-p
HTTP/1.xを使ったリクエスト-h1default supported
HTTP/2を使ったリクエストdefault supportednot 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攻撃にも使えるツールのため、使用の際は注意してください。