PHPを実行する際に作られる中間コードをキャッシュすることで高速化させる。以下のものを試してみた。
- Zend Optimizer - コードの最適化をする
- eAccelerator
- APC(Alternative PHP Cache)
- XCache
Zend Optimizer
Zend Japan, Ltd.からファイルをダウンロード(会員登録が必要)してインストールする。
# tar zxvf ZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz # cd ZendOptimizer-3.3.0a-linux-glibc21-i386 # ./install
スクリプトを使ってインストールすると、元のphp.iniを書き換えるので元に戻す。
# diff -u php.ini-zend_optimizer.bak php.ini --- php.ini-zend_optimizer.bak 2008-09-19 23:46:44.000000000 +0900 +++ php.ini 2008-09-19 23:46:44.000000000 +0900 @@ -1263,3 +1263,11 @@ ; End: + + +[Zend] +zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.0 +zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.0 +zend_optimizer.version=3.3.0a +zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so +zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so
# mv php.ini-zend_optimizer.bak php.ini
Zend Optimizer の設定は別ファイルに書く。
# vi /etc/php5/conf.d/zend_optimizer.ini [Zend] zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.0 zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.0 zend_optimizer.version=3.3.0a zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so
eAccelerator
php5-dev(phpizeコマンド)が必要
$ sudo apt-get install php5-dev
eAcceleratorからソースをダウンロードしてインストール。
$ wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2 $ tar jxvf eaccelerator-0.9.5.3.tar.bz2 $ cd eaccelerator-0.9.5.3/ $ phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519 $ ./configure --enable-eaccelerator $ make $ sudo make install Installing shared extensions: /usr/lib/php5/20060613+lfs/
設定
ビルドしたディレクトリにあるeaccelerator.iniをコピーして設定する。
# cp eaccelerator.ini /etc/php5/conf.d/ # vi /etc/php5/conf.d/eaccelerator.ini extension = "eaccelerator.so" eaccelerator.shm_size = "32" eaccelerator.cache_dir = "/tmp/eaccelerator" eaccelerator.compress = "1" eaccelerator.compress_level = "9"
- eaccelerator.shm_size - メモリのサイズ(MB)
- eaccelerator.cache_dir - キャッシュのディレクトリ
- eaccelerator.compress - キャッシュの圧縮 1:有効 0:無効
- eaccelerator.compress_level - 圧縮のレベル 9:最大 1:最小
キャッシュを保存するディレクトリを作成する。
# mkdir -m 777 /tmp/eaccelerator
コントロールパネル(WEB管理画面)を使う
control.phpをコピーする。
$ cp control.php (ApacheのDocumentRoot以下)/eaccelerator/
control.phpにはパスワードなしでアクセスできるように修正する。(Apacheでアクセス制限をしている)
$ diff -u control.php.orig control.php
--- control.php.orig 2008-09-20 19:14:46.000000000 +0900
+++ control.php 2008-09-20 19:15:09.000000000 +0900
@@ -28,12 +28,14 @@
/** /config **/
/* {{{ auth */
+/*
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_USER']) ||
$_SERVER['PHP_AUTH_USER'] != $user || $_SERVER['PHP_AUTH_PW'] != $pw) {
header('WWW-Authenticate: Basic realm="eAccelerator control panel"');
header('HTTP/1.0 401 Unauthorized');
exit;
}
+*/
/* }}} */
/* {{{ process any commands */
iniファイルに設定追加
# vi /etc/php5/conf.d/eaccelerator.ini eaccelerator.allowed_admin_path = "(control.phpがあるディレクトリのパス)"
APC(Alternative PHP Cache)
PECL :: Package :: APCからソースをダウンロードしてインストール。
$ wget http://pecl.php.net/get/APC-3.0.19.tgz $ tar zxvf APC-3.0.19.tgz $ cd APC-3.0.19/ $ phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519 $ ./configure --enable-apc $ make $ sudo make install Installing shared extensions: /usr/lib/php5/20060613+lfs/
設定
# vi /etc/php5/conf.d/apc.ini [apc] extension=apc.so apc.mode = mmap apc.cachedir = "/tmp/apc" apc.check_mtime = 1 apc.shm_size = 32 apc.optimization = 1 apc.ttl = 43200 apc.check_compiled_source = 1
XCache
aptでインストール。
# apt-get install php5-xcache
設定
# vi /etc/php5/conf.d/xcache.ini xcache.size = 32M xcache.var_size = 20M xcache.mmap_path = "/tmp/xcache" xcache.optimizer = On
パフォーマンス比較
トップページ(http://www.parlia.net/weblog/)にアクセスして比較する。
$ ab -n 100 -c 1 http://www.parlia.net/weblog/
| Time per request (ms) | |
|---|---|
| アクセラレータ無効 | 434.379 |
| eAccelerator 圧縮レベル9 | 313.633 |
| eAccelerator 圧縮なし | 315.739 |
| APC | 483.336 |
| XCache | 578.363 |
| Zend Optimizer | 464.192 |
| Zend Optimizer + eAccelerator 圧縮レベル9 | 332.118 |
| Zend Optimizer + eAccelerator 圧縮なし | 337.198 |
| Zend Optimizer + APC | 515.424 |
| Zend Optimizer + XCache | 708.111 |
eAccelerator 以外は逆に遅くなった。
トラックバックURL
1件のトラックバック
[...] eAcceleratorのeaccelerator_getなどの変数キャッシュの関数を使えるようにしなければならない。前回のconfigureオプションでは有効になっていないので、もう一度ビルドする。 [...]