今回はいくつかあるPHPのアクセラレータの中でも、最近有望視されている(?)ひとつである、XCache(http://xcache.lighttpd.net/)について紹介したいと思います。

 PHPのアクセラレータとは、PHPのバイトコードをキャッシュし、コンパイルにかかる時間を減らし、プログラムの速度を向上させることができるものです。

 サーバにアクセラレータを組み込むだけで、プログラムを特に変更することなく、簡単にPHPスクリプトのパフォーマンスをあげることが可能です。

 今回は、APC、eAccelerator、等々いくつかあるアクセラレータの中のひとつXCacheのインストールについて紹介したいと思います。尚、試してみた環境はCentOS5、PHP 5.1.6、XCache 1.2.2となっています。

 それでは、早速インストールを行っていきしょう。

 まずは、ソースコードをダウンロードし、解凍します。

 今回使用するのは、2007年12月29日にリリースされた最新バージョンXCache 1.2.2となります。

cd /usr/local/src/

wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz

tar xvzf xcache-1.2.2.tar.gz

 つづいて、phpizeとconfigure。

phpize

./configure --enable-xcache

 そして、make、make install

make

make install

 上記でインストールは完了です。make install後にインストール先が表示されますので、こちらを下記の設定ファイルに設定します。(今回環境では、 /usr/lib/php/modules/xcache.soにインストール)

 あとは、php.iniへXCache用の設定を追加します。ダウンロードしたソースの中に「xcache.ini」という、見本ファイルがあるのでこちらを参考に設定します。

 今回は、php.dディレクトリにxcache.iniとしてコピーしました。

cp xcache.ini /etc/php.d/xcache.ini

 あとは、インストールしたサーバの環境に合わせて、xcache.iniを変更します。今回は以下の部分を変更しました。

zend_extension = /usr/lib/php/modules/xcache.so
xcache.size  =                32M
xcache.var_size  =            16M
xcache.mmap_path =    "/tmp/xcache"
xxcache.coveragedump_directory = "/tmp/xcache_cov"

 最後に、apacheを再起動し、XCacheを有効に。phpinfo()で確認してみましょう。

※phpinfo()の結果

phpinfo

 実際に適当なアプリでアクセラレータを使用しない場合とのパフォーマンスを比較してみました。テストにはapacheに付属しているベンチマークプログラム、abを使用し、接続数1000、同時接続数10で計測しました。

ab -n 1000 -c 10 http://example.com/pukiwiki/
##デフォルト(アクセラレータなし)
Concurrency Level:      10
Time taken for tests:   86.644329 seconds
Complete requests:      1000
Failed requests:        2
   (Connect: 0, Length: 2, Exceptions: 0)
Write errors:           0
Total transferred:      11262924 bytes
HTML transferred:       11047494 bytes
Requests per second:    11.54 [#/sec] (mean)
Time per request:       866.443 [ms] (mean)
Time per request:       86.644 [ms] 
                 (mean, across all concurrent requests)
Transfer rate:          126.93 [Kbytes/sec] received
##XCache使用
Concurrency Level:      10
Time taken for tests:   38.545037 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      11245448 bytes
HTML transferred:       11030233 bytes
Requests per second:    25.94 [#/sec] (mean)
Time per request:       385.450 [ms] (mean)
Time per request:       38.545 [ms] 
                 (mean, across all concurrent requests)
Transfer rate:          284.89 [Kbytes/sec] received

 Requests per secondの値で比べてみると、11.54 → 25.94 と大幅に早くなっているのが分かります。

 また、XCacheには管理者用ページも付属しており、XCacheの設定やキャッシュの状況がwebブラウザから確認することができます。

 ダウンロードしたソースの中のadminディレクトリをドキュメントルート以下にコピーします。

 そして、php.ini(今回はxcache.ini)の[xcache.admin]部分でユーザ・パスワードを設定します。

vi /etc/php.d/xcache.ini

  [xcache.admin]
  xcache.admin.auth = On
  xcache.admin.user = "admin"
  xcache.admin.pass = "1a1dc91c907325c69271ddf0c944bc72"
  ;xcache.admin.passにはmd5化した値を記述「md5("pass");の値を設定」

 あとは、apacheを再起動し、ブラウザでadminにアクセスすれば、管理画面が表示されます。

※管理画面

管理画面

 アクセスの多いサイトや処理が重いと感じるなど、パフォーマンスにお困りの方は是非試してみる価値はあると思いますので、利用してみてください。



(アシアル 中川善樹)


この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。