Apacheでmod_deflateを試してみる

VirtualBoxにCentOSをとりあえずインストール
の続き

Apacheでmod_deflateを試してみる。

Apacheのインストールと起動

まずは、Apacheをインストールして起動する。

$ sudo yum -y install httpd
$ sudo service httpd start
http://サーバーのアドレス/

にアクセスして、デフォルトのページを表示する。

レスポンスヘッダーを見てみると、下記のようになっている。
ドキュメントのサイズは5KBほど。

Mac側からabコマンドで負荷をかけてみる。

mac$ ab -c 100 -n 10000 http://サーバーのアドレス/
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 192.168.56.101 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.2.15
Server Hostname:        192.168.56.101
Server Port:            80

Document Path:          /
Document Length:        5039 bytes

Concurrency Level:      100
Time taken for tests:   13.860 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Non-2xx responses:      10000
Total transferred:      52370000 bytes
HTML transferred:       50390000 bytes
Requests per second:    721.49 [#/sec] (mean)
Time per request:       138.601 [ms] (mean)
Time per request:       1.386 [ms] (mean, across all concurrent requests)
Transfer rate:          3689.91 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   5.6      0     154
Processing:     1  137 136.2     67    2071
Waiting:        0   63  78.8     52    1608
Total:          1  138 136.5     69    2076

Percentage of the requests served within a certain time (ms)
  50%     69
  66%    151
  75%    221
  80%    256
  90%    329
  95%    378
  98%    446
  99%    521
 100%   2076 (longest request)

約13秒かかった。

mod_deflateの設定

mod_deflateを設定する。
httpd.confに下記を追加して、Apacheを再起動する。

$ sudo vi /etc/httpd/conf/httpd.conf
↓追加
<IfModule mod_deflate.c>
  SetOutputFilter DEFLATE
  AddOutputFilterByType DEFLATE text/html
</IfModule>
$ sudo service http restart
http://サーバーのアドレス/

にアクセスして、レスポンスヘッダーを見てみると、下記のようになる。
ドキュメントのサイズは2KBほどになった。

Mac側からabコマンドで負荷をかけてみる。
(mod_deflateを有効にするには「-H 'Accept-Encoding: gzip,deflate'」を付ける必要あり)

mac$ ab -c 100 -n 10000 -H 'Accept-Encoding: gzip,deflate' http://サーバーのアドレス/
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 192.168.56.101 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.2.15
Server Hostname:        192.168.56.101
Server Port:            80

Document Path:          /
Document Length:        2017 bytes

Concurrency Level:      100
Time taken for tests:   16.121 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Non-2xx responses:      10000
Total transferred:      22620000 bytes
HTML transferred:       20170000 bytes
Requests per second:    620.30 [#/sec] (mean)
Time per request:       161.213 [ms] (mean)
Time per request:       1.612 [ms] (mean, across all concurrent requests)
Transfer rate:          1370.23 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   3.3      0      49
Processing:     1  160 154.9    135    4250
Waiting:        1   56  82.4     20    1353
Total:          1  161 155.0    136    4255

Percentage of the requests served within a certain time (ms)
  50%    136
  66%    243
  75%    281
  80%    302
  90%    358
  95%    406
  98%    464
  99%    505
 100%   4255 (longest request)

約16秒かかった。

100KBのHTMLの場合

100KBのHTMLだとどうなるか試してみる。

まず、100KBのHTMLを生成する。

$ sudo yum -y install php
$ sudo chown ユーザー名:ユーザー名 /var/www/html
$ cd /var/www/html
$ php -r '$s=range("a","z"); for($i=0;$i<102400;$i++) echo $s[array_rand($s)];' > 100kb.html

mod_deflateを設定していない場合とした場合でどれくらいかかるか測ってみる。

mod_deflateを設定していない場合
mac$ ab -c 100 -n 10000 -H 'Accept-Encoding: gzip,deflate' http://192.168.56.101/100kb.html
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 192.168.56.101 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.2.15
Server Hostname:        192.168.56.101
Server Port:            80

Document Path:          /100kb.html
Document Length:        102400 bytes

Concurrency Level:      100
Time taken for tests:   85.175 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1026750000 bytes
HTML transferred:       1024000000 bytes
Requests per second:    117.41 [#/sec] (mean)
Time per request:       851.749 [ms] (mean)
Time per request:       8.517 [ms] (mean, across all concurrent requests)
Transfer rate:          11772.08 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2  13.5      0     326
Processing:     6  849 1024.4    736   11262
Waiting:        0   77 178.6      1    3834
Total:          7  850 1024.7    737   11263

Percentage of the requests served within a certain time (ms)
  50%    737
  66%    812
  75%    866
  80%    902
  90%    994
  95%   1091
  98%   1415
  99%  10489
 100%  11263 (longest request)

約85秒かかった。

mod_deflateを設定した場合
mac $ ab -c 100 -n 10000 -H 'Accept-Encoding: gzip,deflate' http://192.168.56.101/100kb.html
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 192.168.56.101 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.2.15
Server Hostname:        192.168.56.101
Server Port:            80

Document Path:          /100kb.html
Document Length:        64998 bytes

Concurrency Level:      100
Time taken for tests:   129.166 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      652960000 bytes
HTML transferred:       649980000 bytes
Requests per second:    77.42 [#/sec] (mean)
Time per request:       1291.662 [ms] (mean)
Time per request:       12.917 [ms] (mean, across all concurrent requests)
Transfer rate:          4936.71 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.8      0      11
Processing:    89 1289 250.3   1283    3704
Waiting:        3  233 248.1    177    1857
Total:         94 1290 250.2   1283    3704

Percentage of the requests served within a certain time (ms)
  50%   1283
  66%   1374
  75%   1439
  80%   1480
  90%   1588
  95%   1689
  98%   1819
  99%   1943
 100%   3704 (longest request)

約129秒かかった。