Web Developers Antenna 〜ウェブ開発者アンテナ〜 [W'ANEB]

Web Developers Antennaでは、開発ノウハウ、便利ツール、Web運用に関する情報を蓄積していきます。

*

Apache Bench(アパッチ ベンチ) について

      2015/08/25

スポンサードリンク

Apache Bench(アパッチ ベンチ) について

ApacheのWEBサーバの性能を測定したい時に利用するApache標準で付いているツールを紹介します。
WEBサーバを運用していると、どのくらいのパフォーマンスで運用できるのか?どのくらいの負荷に耐えられるのか?など、気になってくることがあります。
この部分を把握しておかないと、アクセス増加時にパフォーマンスが悪くなって表示が遅くなったり、高負荷の際にサーバダウンしてしまいます。
※Apache Benchは、使用方法を間違えると他のサーバへ負荷をかけてしまうこともありますので、使用する際は十分注意してください。

Apache Benchのツールコマンド使用方法

Apache Bench(アパッチ ベンチ)はコマンド[ab]を利用します。
これはApache HTTP Serverがインストールしてあれば利用できる、WEBサーバの性能を計測するためのコマンドです。

使用する前にまず、abコマンドで利用できるオプションを覚えます。

基本的なオプション

-c:同時接続数。
-n:発行リクエスト数。

コマンド形式

ab -c [同時接続数] -n [発行リクエスト数] [URL]

主に利用するオプション

オプション名 説明
-c 数値 同時に発行するリクエストの数を数値で指定
-n 数値 リクエストの総数を数値で指定
-t 数値 サーバからのレスポンスの待ち時間(秒)を数値で指定
-A ユーザー名:パスワード ベーシック認証が必要なコンテンツにテストする
-P ユーザー名:パスワード 認証の必要なプロキシを通じてテストする
-X プロキシサーバ名:ポート番号 プロキシ経由でリクエストする場合に指定
-V バージョンを表示
-h ヘルプを表示

(他にも色々あるので、詳細は -h オプションで確認してください。)

早速利用してみましょう。

例えば、10ユーザが同時にhttp://example.com/ に1リクエストを発行した場合を想定しました。

ab -c 10 -n 10 http://example.com/

10ユーザが同時に10リクエストを発行した場合を想定しています。
-nには10 x 1-0 = 100を指定します。

ab -c 10 -n 100 http://example.com/

接続先にベーシック認証がかかっている場合。
-Aの後にベーシック認証ユーザとパスワードを:(コロン)で区切って指定します。

ab -c 100 -n 100 -A user:pass http://example.com/

同時接続数よりTotal発行リクエスト数が少ないとエラーメッセージが表示されます。

ab -c 100 -n 10 -A hogeuser:hogepass http://example.com/
ab: Cannot use concurrency level greater than total number of requests
・・・

同時に100人で合計10リクエストの状況がありえないので、エラーが返ります。

事例サンプル

以下のコマンドを実行した時の結果サンプルです。URLはExample Domain(例示ドメイン) にしています。

$ ab -c 10 -n 10 http://example.com/

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking example.com (be patient)…..done
Server Software: Apache
Server Hostname: example.com
Server Port: 80

Document Path: /
Document Length: 420 bytes

Concurrency Level: 10
Time taken for tests: 0.051 seconds
Complete requests: 10
Failed requests: 0
Total transferred: 6740 bytes
HTML transferred: 4200 bytes
Requests per second: 194.61 [#/sec] (mean)
Time per request: 51.384 [ms] (mean)
Time per request: 5.138 [ms] (mean, across all concurrent requests)
Transfer rate: 128.09 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 0
Processing: 46 48 1.6 48 51
Waiting: 46 48 1.6 48 51
Total: 46 48 1.5 49 51

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

となります。

主なポイントを解説すると、

■リクエストの正常処理の確認
Complete requests:正常処理リクエスト数
Failed requests:処理失敗リクエスト数

上記の例では、10リクエストを発行して、
Complete requests:10
Failed requests:0
という結果になったので、
全てのリクエストが正常に行われたということです。

■リクエストはどこまで耐えられるのか?
ab -c 10 -n 10
オプションの、-c と -nの値を増加させていくとFailed requestsが0以外の数が上がってくるので、
そのリクエストがWEBサーバの負荷の限界と判断できます。

■リクエスト/秒 でどれくらい処理できるのか?
Requests per secondを参照すると。
194.61とあるので、1秒あたり約194リクエストまで処理可能となります。

■パフォーマンスは?
1リクエストあたりの処理時間をみるには、
Time per request(mean, across all concurrent requests)を参照します。
上記の例では、5.138 ms要したことになります。

全リクエストの処理時間をみるには、
Time per request(mean)を参照します。
上記の例では、51.384 ms要したことになります。

いかがでしたでしょうか?
WEBサーバの性能を計測するツールとしては、「Apache Bench」はデフォルトでインストールされているため手頃に性能評価が行えるツールとして利用して、「weighttp」などは強力な負荷テストなどを行う際に利用していただくなど、状況に応じて使い分けていただくことをお勧めします。

※Apache Benchは、使用方法を間違えると他のサーバへ負荷をかけてしまうこともありますので、使用する際は十分注意してください。

 - Apache関連, Web Development, コマンド , ,