EatSmartシステム部ブログ

ウェブサイトの開発や運営に関する情報です。

apache benchによるWEBサービスの性能測定について

今回はWEBサーバの性能測定について記載します。
インフラ移行を行う際、新環境でWebサービス公開前の性能測定等を行う必要があるかと思います。
そんなときに手軽に利用できるツールとてapache benchがあります。
今回導入~測定(確認ポイント)迄をまとめてみました。

Apache Benchの入手

Apache Benchは、Apache Software Foundationが提供している「Apache HTTP Server」に同封されておりApache HTTP Serverがインストールされている環境なら直ぐに利用可能です。
今回は、Windows版(Ver2.4)を利用しましたが、Windows版はApache HTTP Serverをインストールしなくても、zipを解凍したbinフォルダーにApache Benchのツールが同封されています。

Apache Benchの利用

まず、WindowsApache Benchを選定した理由ですが、前提としてグローバルIP経由での性能測定を行いたかったことと、上記「Apache Benchの入手」で記載した通り導入が手軽だったことです。
次に、Apache Benchの実行方法ですが、Windowsコマンドプロンプトを起動して、httpで測定するの場合 ab.exeを、httpsで測定するの場合 abs.exeを実行します。

基本コマンド
HTTP
C:\Apache24\bin>ab -n 100 -c 5  http://・・・・・・・
HTTPS
C:\Apache24\bin>abs -n 100 -c 5  http://・・・・・・・

Apache Bench基本オプション

基本的には-nと-cオプションで測定可能です。

-n:トータル発行するリクエスト数
-c:同時接続数

その他よく利用するオプション

-t:サーバからのレスポンスの待ち時間(秒)
-A:ベーシック認証が必要な場合ユーザー名:パスワードを指定
-p:ポストデータが必要な場合指定
-X:プロキシ経由でリクエストする場合プロキシサーバ名:ポート番号を指定
-V:バージョンを表示
-h:ヘルプを表示

httpd.apache.org

Apache Benchの確認方法

コマンドを実行すると以下の様な結果が出力されます

c:\Apache24\bin>abs -n 100 -c 5  https://・・・・・・・


Server Software:        nginx
Server Hostname:        ・・・・・・・
Server Port:            443
SSL/TLS Protocol:       ・・・・・・・
Server Temp Key:        ・・・・・・・
TLS Server Name:        ・・・・・・・

Document Path:          ・・・・・・・
Document Length:        20838 bytes

Concurrency Level:      5
Time taken for tests:   3.625 seconds
Complete requests:      100
Failed requests:        50
   (Connect: 0, Receive: 0, Length: 50, Exceptions: 0)
Total transferred:      2134874 bytes
HTML transferred:       2076774 bytes
Requests per second:    27.58 [#/sec] (mean)
Time per request:       181.271 [ms] (mean)
Time per request:       36.254 [ms] (mean, across all concurrent requests)
Transfer rate:          575.06 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       19   51  49.5     38     374
Processing:    48  110 105.7     78     591
Waiting:       44  104 101.6     73     582
Total:         75  161 118.2    122     625

Percentage of the requests served within a certain time (ms)
  50%    122
  66%    141
  75%    151
  80%    179
  90%    298
  95%    517
  98%    624
  99%    625
 100%    625 (longest request)

出力項目

・Complete requests
 正常に処理したリクエスト数

・Failed requests
 処理に失敗したリクエスト数(基本0)

・Time taken for tests
 テストに要した時間(数値が低いほど良い)

・Requests per second
 1秒で処理できるリクエスト数(数値が高いほど良い)

・Time per request(mean)
 同時実行したリクエストの平均処理時間(数値が低いほど良い)

・Time per request(mean, across all concurrent requests)
 1リクエストの平均処理時間(数値が低いほど良い)

・Transfer rate
 1秒間で受け取ったデータの大きさ(数値が高いほど良い)

・Connection Times (ms)
 リクエストに要した時間(ミリ秒)の内訳。

・Percentage of the requests served within a certain time
 全リクエストの割合(%)に対して、処理が完了した時間(ms)を表す。

主な確認ポイント

リクエストは全部正常に処理されたか?

Complete requests/Failed requests

※今回50リクエスト失敗していますが、レスポンス毎にContent-Lengthのサイズが異なる(動的)ページの場合、失敗したリクエストとして“Length:”と伴にカウントされます。
(1つ前の結果とContent-Lengthを比較し、異なる場合失敗としてカウントされます)
この場合、apacheログ等を参照して、レスポンスが200且つ妥当なContent-Lengthが返却されて いれば問題ありません。

秒間どれくらいのリクエストを捌けるのか?

Requests per second

(例) 月間 1千万PVのサイトの場合、秒間≒3.8リクエストは達成する必要があります。 10,000,000(PV)÷30(日)÷24(時間)÷60(分)÷60(秒) ≒ 3.8

パフォーマンス確認

Time per request(mean, across all concurrent requests)

1リクエストあたりの処理時間を確認します。

何リクエストまで耐えられるのか?

オプション -n -cを増していき、Failed requestsが0でなくなるのが限界点となります。

その他

Apache Benchで性能測定をする際、301、302等リダイレクトを行っていると正しく計測されませんので、一度apacheログ等でレスポンスが200が返却されている事を確認してから、実施すると良いです。
Apache Benchは、手軽に導入できるので是非活用してみてください。