株式会社エスロジカル
株式会社エスロジカル
SSL証明書(3,300円/1年~ DV、OV、EV)、セキュリティ、Web開発、Linux開発、Go言語

Apache:Apache Bench(パフォーマンス測定)

技術ドキュメント目次 -> Apache -> Apache Bench(パフォーマンス測定)

本技術ドキュメントは、2002~2004年頃に作成したものが多いです。
内容が古くなっていることもあるかと思いますが、ご了承ください。

サイフにやさしいSSL証明書
【低価格SSL証明書】弊社運営の低価格SSL証明書販売サイト、翌月末払いなど請求書払いも可能。


◆ はじめに

Webサーバーがどの程度のパフォーマンスを発揮しているか、
CGIやPHPやサーブレットで開発された各Webアプリケーションが
どの程度の数のリクエストを処理することができるのか等の性能を測定し、
把握しておくことはWebサーバーの運用において非常に重要です。

サイトへのアクセスが、
Webサーバーの性能上の限界を超えるほど大きくなってきた時には、
機器の増設やプログラムの改良など、なんらかの対応を行う必要が出てくるからです。

Apache に付属している Apache Bench というプログラムは、
特定の URL に対するリクエストを擬似的に連続して発生させ、
Webサーバの性能をレポートしてくれますので、
上記のような測定作業に非常に有効に使えます。

◆ Apache Bench を使用してみる

Apache Bench は Apache をインストールすると、
次のファイル名で標準にインストールされます。

(apacheをインストールしたディレクトリ)/bin/ab

例えば、
http://192.168.1.1/ に対するアクセスがどの程度の
パフォーマンスを発揮するかを確認するには次のようにします。
(合計100アクセス、多重度5 のリクエストを擬似的に発生させています。)

# ./ab -n 100 -c 5 http://192.168.1.1/
This is ApacheBench, Version 1.3d <$Revision: 1.59 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.1 (be patient).....done
Server Software:        Apache/1.3.24
Server Hostname:        192.168.1.1
Server Port:            80

Document Path:          /
Document Length:        1456 bytes

Concurrency Level:      5
Time taken for tests:   0.247 seconds
Complete requests:      100
Failed requests:        0
Broken pipe errors:     0
Total transferred:      194480 bytes
HTML transferred:       151424 bytes
Requests per second:    404.86 [#/sec] (mean)
Time per request:       12.35 [ms] (mean)
Time per request:       2.47 [ms] (mean, across all concurrent requests)
Transfer rate:          787.37 [Kbytes/sec] received

Connnection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0     2    2.0      2     8
Processing:     2     9   13.7      7   110
Waiting:        0     7   13.7      4   108
Total:          2    11   13.5     10   110

Percentage of the requests served within a certain time (ms)
  50%     10
  66%     11
  75%     11
  80%     11
  90%     11
  95%     12
  98%     47
  99%     87
 100%    110 (last request)
#


上記の Apache Benche からのレポートは、
Failed requests: の値と
Broken pipe errors: の値がともに 0 ですので、
100回のリクエストは特に問題なく終了したと判断できます。

ですので、
Requests per second: や Time per request: や Time per request: として
出力されたレポート値をそれなりに信用してよさそうとの判断になります。

上記の例だと、1秒間あたりに約404回のリクエストを処理できています。

また、
File Not Found(404) など、レスポンスコードが200番台ではなかった場合は、
Non-2xx responses: という値がレポートされますので、
その出力がなかったかどうかもあわせて確認してみてください。

◆ 補足

実際の運用時には、
登録処理を行うCGIに対してユーザーAがアクセスを行い、
参照処理を行うCGIに対してユーザーBがアクセスを行う、など、
複数のURLに対するアクセスが連続して同時に発生します。

また、サーブレットなどを用いる場合には、スレッド間の排他制御など、
並列したアクセスに対しての予期せぬ動作が発生するかもしれません。

ですので、
複数の Apache Bench を同時に起動して確認を行うなど、
状況に応じて適当に工夫したパフォーマンス測定を行ってみる必要があります。

ネットワーク的に条件の悪いホストからのリクエストと、
ネットワーク的に条件の良いホストからのリクエストを、
同時に行ってみるのも効果的な場合もあるかもしれません。



■ Apache についての他のドキュメント


■ 他のグループのドキュメント

Apache  /  Linux  /  FreeBSD  /  OpenSSL  /  Perl  /  HTTPプロトコル  /  Jakarta Tomcat  /  Java  /  NetBSD  /  Oracle  /  PostgreSQL  /  UNIX の C言語  /  UNIX のコマンド  /  Windows  /  bind  /  システム運用TIPS

アンケートにご協力をお願いいたします。

1. このドキュメントへの評価をご選択ください。
         

2. ご感想をお書きください。