Apache の性能を知りたい!

今回、初めて自分のほーむぺーじtwhs.meを作りました。

DigitalOceanというところで VPS を借りて、 apache を立ててほーむぺーじを作ったのですが、私が立てた apache がどの程度の性能か気になります。

(...)、気になります!

ということで、調べてみました。

アクセスログ応答時間を記録

apacheアクセスログは /var/log/httpd/access_log に記録されています。そのログにほーむぺーじへのリクエストを処理するのに掛かった時間を記録して、性能を見てましょう!

リクエストへの応答時間をログに表示するには、ログのフォーマットを変更します。

apache ではデフォルトでいくつかのログのフォーマットスタイルが定義されています。私の環境(apache2.2)では、"combined" というスタイルがデフォルトで適用されていたので、そのスタイルを修正する形で、リクエストへの応答時間を表示してみました。

$ vi /etc/httpd/conf/httpd.conf

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

これを、

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined

すると、

$tail -f /var/log/httpd/access_log
XX.XX.XX.XX - - [08/Mar/2014:09:19:17 -0500] "GET / HTTP/1.1" 200 3095 333

ような感じで、ログの末尾にリクエストへの応答時間(ミリ秒単位)が表示されるようになりました(上の例では、333ミリ秒)。

ちなみに、応答時間はHTTPのリクエスト行を読み終わってから、データをsend(2)し切ったタイミングだそうです。(参考Apacheのリクエスト処理時間(%T or %D)は正確には何の時間か)

ab コマンドでベンチマークを取る

ab コマンドとは man によると、

ab - Apache HTTP server benchmarking tool

だそうです。apacheベンチマークを取るツールですね!

基本的な使い方としては、

$ ab [OPTIONS] URL

今回使うオプションとしては、

*-c
    *同時接続クライアント数
*-n
    *総リクエスト数

です。

さっそく自分のほーむぺーじに使ってみましょう。

$ab -c 10 -n 100 http://twhs.me/

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking twhs.me (be patient).....done


Server Software:        Apache          
Server Hostname:        twhs.me
Server Port:            80

Document Path:          /
Document Length:        3095 bytes # 最初に帰ってきたファイルの大きさ

Concurrency Level:      10          #同時接続クライアント数
Time taken for tests:   3.549 seconds   
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      334900 bytes
HTML transferred:       309500 bytes
Requests per second:    28.18 [#/sec] (mean)
Time per request:       354.909 [ms] (mean)
Time per request:       35.491 [ms] (mean, across all concurrent requests)
Transfer rate:          92.15 [Kbytes/sec] received

Connection Times (ms)
    min  mean[+/-sd] median   max
    Connect:      150  163  11.0    162     210
    Processing:   152  171  18.7    167     308
    Waiting:      149  168  18.6    164     303
    Total:        304  334  24.2    330     475

Percentage of the requests served within a certain time (ms)
    50%    330
    66%    338
    75%    343
    80%    345
    90%    359
    95%    380
    98%    409
    99%    475
    100%    475 (longest request)

上の結果を見ると、1秒あたり、28.18リクエストを処理出来ているということです。

ちなみに、"ab -c 100 -n 1000 http://twhs.me/"だと、94件/秒 な感じでした。