目次

PHP :: eaccelerator のインストールと設定 (Apache2/PHP5)

eaccelerator とは

PHPをはじめとしたインタプリタ言語(スクリプト言語)は、実行のたびに毎回スクリプトをコンパイルします。
C言語のようなコンパイラ言語と比べ実行速度が遅いのは、このコンパイルにかかるオーバーヘッドが大きく影響しています。

eaccelerator は、PHPスクリプトのコンパイル結果(バイトコード)をキャッシュしておき、2回目以降はそのバイトコードを利用することでコンパイルにかかるオーバーヘッドを減らし、高速化を図ります。



ベンチマーク(効果測定)

eaccelerator のインストール前と後で、とあるサイト(PHPが動的に生成しているサイト)のベンチマークを取ってみました。

execute_timeスクリプト実行時間
memory_usagePHPに割り当てられたメモリ
memory_peak_usagePHPに割り当てられたメモリの最大値

eaccelerator のインストール前

execute_timememory_usagememory_peak_usage
1回目0.179284 sec 96 KB 7,194 KB
2回目0.178434 sec 96 KB 7,195 KB
3回目0.178150 sec 96 KB 7,195 KB

eaccelerator のインストール後

execute_timememory_usagememory_peak_usage
1回目0.037633 sec 62 KB 813 KB
2回目0.037447 sec 62 KB 813 KB
3回目0.033950 sec 62 KB 813 KB

結果

execute_time約4.9倍の高速化
memory_usage約35%の節約
memory_peak_usage約88%の節約


スクリプトの高速化はもちろんのことですが、メモリの節約にも貢献しています。
専用サーバーやVPSの環境でPHPアプリケーションを構築する時は、eaccelerator のようなアクセラレーターのインストールを行っておくべきでしょう。



インストール

eaccelerator ダウンロード
http://eaccelerator.net/


1. 最新版を wget して展開

% wget "http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2"
% tar jxvf eaccelerator-0.9.6.1.tar.bz2
tar: bzip2: Cannot exec: No such file or directory


2. php 拡張モジュールのビルド環境を準備する

% cd eaccelerator-0.9.6.1
% phpize
phpize コマンドがないときは php5-dev をインストールする
私の環境では、

% sudo apt-get update
% sudo apt-get upgrade
% sudo apt-get install php5-dev

でインストール

関連エントリー:Unix :: コマンド / apt-{get, cache}

sudo yum install php-devel


3. php-config5 を探す

% locate php-config5
/usr/bin/php-config5


4. php-config5 のパスを指定して cofigure

% ./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config5


5. make & install

% make
% sudo make install
Installing shared extensions:     /usr/lib/php5/20060613+lfs/

6. eaccelerator.so の確認

% ls /usr/lib/php5/20060613+lfs/eaccelerator.so
/usr/lib/php5/20060613+lfs/eaccelerator.so*

7. キャッシュDIR作成

% mkdir /tmp/eaccelerator
% sudo chown www:www /tmp/eaccelerator


8. control.php を DOCUMENT_ROOT 配下にコピー

% cp control.php /var/www/htdocs

9. control.php の $user / $pw を変更しておく

/** config **/
$user = "admin"; <= 変更
$pw = "eAccelerator"; <= 変更
/** /config **/

10. php.ini に [eAccelerator] セクションを追記 (最下部に追記)

% vi /etc/php5/apache2/php.ini

[eAccelerator]
zend_extension = "/usr/lib/php5/20060613+lfs/eaccelerator.so" <= eaccelerator.so の指定
eaccelerator.shm_size = "64"
eaccelerator.cache_dir = "/tmp/eaccelerator" <= キャッシュDIR の指定
eaccelerator.allowed_admin_path = "/var/www/htdocs/control.php" <= control.php の指定
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys = "shm_and_disk"
eaccelerator.sessions = "shm_and_disk"
eaccelerator.content = "shm_and_disk"

設定の詳細は下記サイトが参考になります
http://zumomo.org/archives/119/


11. apacheの再起動

% sudo apache2ctl restart
もし、apacheが正常に起動しないときは eaccelerator.shm_size を小さくしてみる
eaccelerator.shm_size = "32"


12. eaccelerator が正しく動作しているか確認

その1)phpinfo.php を作成し、ブラウザからアクセス

<?php phpinfo(); ?>
⇒ eacceleratorセクションが出来ているか

その2)キャッシュDIR にキャッシュが生成されているか

% find /tmp/eaccelerator -type f | less

その3)control.php にブラウザからアクセス

http://example.com/control.php