WordPress on Debian(etch) の根本的な高速化

生足以前、”WordPress 2.6.x 高速化する、2つの大原則” で、Wordpress 自身を高速化する方法を載せましたが、Object-Caching の機能が 2.7.x では怪しいことと、根本的な解決策ではないと考えていました。
根本的な解決策としては、”WordPress を高速化する5つの方法” にもあるとおり、「PHPの高速化」を利用することで、Wordpress のバージョンそのものに影響されない速度の改善が見込まれると考えられます。

ただ、debian では独自の世界が広がっていますので、提供されていないパッケージを利用するにはちょっと壁があります。とはいえ、PHP の高速化自体は非常に興味深いものです。
しばらく、サーバ自体の高速化が実施できない間は、こうやってこそくにがんばっていきたいと考えてますよw


いくつかある PHP 高速化技法のうちから、今回、採用したのは “APC” です。
理由は

  1. WordPress.org で利用している
  2. PECLで簡単にインストールできる

ということからです。
うちのサイトでは、Wordpress でのアクセスが一番多いことから、WordPress.org での実績が重要な部分です。

手順は、Installing PHP APC on Ubuntu Dapper (and Debian?) を参考にさせていただきました。

必要なパッケージの準備

$ sudo apt-get update
$ sudo apt-get install apache2-dev php5-dev php-pear make

PECL 使用の準備

$ sudo ln -s /usr/bin/apxs2 /usr/bin/apxs

apache2 + PHP5 環境では必要となりそうです。
/usr/bin/apxs の存在を確認をしておきましょう。

apc の導入とコンパイル

pecl 便利ですね。

$ sudo pecl install apc

これだけで、ダウンロードから apache2 用モジュールへのコンパイルまで、実行されます。i

php.ini の定義

php.ini で、extension の load を定義しますが、debian ぽく個別の ini ファイルを定義しておきます。

# echo extension=apc.so > /etc/php5/apache2/conf.d/apc.ini

※ root アカウントで実行してください。sudo したいなら sudo vi /etc/php5/apache2/conf.d/apc.ini でどうぞ

apache2 への反映

通常通り、apache2 の再始動を実施してくださいませ。これで、完了です。

$ sudo /etc/init.d/apache2 restart

ベンチマークの結果

トップページの読み込み時間 19秒→12秒 約 7秒の改善

APC実装前

sudo ab -n 10 -c 10 http://oshiire.to/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking oshiire.to (be patient).....done


Server Software:        Apache/2.2.3
Server Hostname:        oshiire.to  
Server Port:            80

Document Path:          /
Document Length:        65287 bytes 

Concurrency Level:      10
Time taken for tests:   19.756717 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      655570 bytes
HTML transferred:       652870 bytes
Requests per second:    0.51 [#/sec] (mean)
Time per request:       19756.718 [ms] (mean)
Time per request:       1975.672 [ms] (mean, across all concurrent requests)
Transfer rate:          32.39 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0 4821 3000.3   5063    9144
Processing:  3524 8755 3618.6   9152   15062
Waiting:        6 5506 3511.9   6739   10843
Total:       9152 13577 4137.8  12197   19756

Percentage of the requests served within a certain time (ms)
  50%  12197
  66%  16781
  75%  17525
  80%  18395
  90%  19756
  95%  19756
  98%  19756
  99%  19756
 100%  19756 (longest request)

APC実装後

$ sudo ab -n 10 -c 10 http://oshiire.to/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking oshiire.to (be patient).....done


Server Software:        Apache/2.2.3
Server Hostname:        oshiire.to
Server Port:            80

Document Path:          /
Document Length:        65287 bytes

Concurrency Level:      10
Time taken for tests:   12.962584 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      655570 bytes
HTML transferred:       652870 bytes
Requests per second:    0.77 [#/sec] (mean)
Time per request:       12962.584 [ms] (mean)
Time per request:       1296.258 [ms] (mean, across all concurrent requests)
Transfer rate:          49.37 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0  134  92.4    107     261
Processing:  3693 9116 4141.3  12628   12913
Waiting:      558 4664 2910.7   6793    7331
Total:       3791 9251 4103.5  12735   12962

Percentage of the requests served within a certain time (ms)
  50%  12735
  66%  12862
  75%  12929
  80%  12945
  90%  12962
  95%  12962
  98%  12962
  99%  12962
 100%  12962 (longest request)
  1. 64bit Kernel 利用時にはエラーが出ることがあります。参考元のサイトをご覧ください []