ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

ApacheBenchを使ってみた

今更ながら、ApacheBenchを使ってみたので簡単に紹介したいと思います。

ApacheBenchとは?

WebサーバーのApacheに付属しているベンチマーク用のソフトです。

ベンチマーク対象となるWebサーバーに対して、単一のURLを指定してベンチマークをすることができます。単一URLしか指定できないため、簡易的な性能試験をするような場合に使えるものと理解しておけば良さそうです。

使い方

ApacheBenchは、${SRVROOT}配下のbinフォルダに格納されています。Windowsだと、「ab.exe」というファイルがApacheBenchです。

書式は以下のような形で、abコマンドにいくつかのオプションを指定し、ベンチマーク対象のURLを指定する形です。

ab [オプション] URL

使用例

実際に使用例を見た方が分かりやすいでしょう。例えば以下のようにコマンドを実行します。

ab -n 1000 -c 100 http://127.0.0.1/

すると以下のような結果が返却されます。私の環境で実行した結果をそのまま添付しました。

C:\Program Files\Apache\bin>ab -n 1000 -c 100 http://127.0.0.1/
This is ApacheBench, Version 2.3 <$Revision: 1903618 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        Apache/2.4.57
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /
Document Length:        46 bytes

Concurrency Level:      100
Time taken for tests:   0.490 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      291000 bytes
HTML transferred:       46000 bytes
Requests per second:    2040.02 [#/sec] (mean)
Time per request:       49.019 [ms] (mean)
Time per request:       0.490 [ms] (mean, across all concurrent requests)
Transfer rate:          579.73 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.6      0       6
Processing:    14   47  10.3     48      68
Waiting:        1   36  11.0     36      64
Total:         14   47  10.3     48      70

Percentage of the requests served within a certain time (ms)
  50%     48
  66%     49
  75%     50
  80%     50
  90%     59
  95%     65
  98%     68
  99%     68
 100%     70 (longest request)


結果は、だいたいなんとなくわかると思いますが、まずは上記例で実行時に指定した2つのオプションを紹介します。基本的に使うのはこの2つかなと思います。

-n 総リクエスト数
-c 並列リクエスト数

今回は、"-n 1000"なので総リクエスト数は1,000個で、"-c 100"なので並列リクエスト数は100個になります。イメージとしては、100人がそれぞれ10個のリクエストを実行する形ですね。

出力結果の紹介

上記でApacheBenchを実際に実行してみましたが、様々な項目が出力されています。今回は、いくつかピックアップして紹介したいと思います。

Complete requests

リクエストした結果レスポンスを正常に受け取ることができた数です。今回は、"1,000"という記載があります。今回は、実行時に"-n 1000"と指定しているのですべてのリクエストが成功していることが分かります。

Failed requests

失敗と見なされたリクエストの数です。何らかの原因で、失敗したリクエストの数がここに記載されます。今回は、0なので1つも失敗していないことが分かります。

Requests per second

1秒あたりに処理できるリクエスト数です。この値は、リクエスト数を合計処理時間で割った結果です。「Time taken for tests」が"0.490"なので、1,000 / 0.490 ≠ 2,040なので概ね合っていますね。

Time per request

1つのリクエストを処理するのにかかる平均時間です。
この項目は2つ表示されていて、オプション「-c」を使用して並列実行したかどうかで値が変わってきます。並列実行しない場合は2つとも同じ値になりますが、並列実行した場合は、仮に直列実行した場合はどの程度になるかという想定値が1つめの値に出力されます(計算式から見たら、おそらくそういう意図かなと思いますが少し意図が分かりづらい値ですね)。

おわりに

いかがでしたでしょうか。Apacheをインストールしていれば、何もせずに使えるので気軽に試せるところがApachBenchの良いところですね。
上記では簡単な使い方のみ紹介しましたが、他にもオプションがいくつかあるので気になる方は下部参考にあります公式サイトをご参照いただければと思います。

なお本格的な性能試験には、jMeterなどを使うのが良いかもしれませんので気になる方は調べてみるとよいかもしれません。

今回はこの辺で。最後までお読みいただきありがとうございました。