PHPをはじめとしたインタプリタ言語(スクリプト言語)は、実行のたびに毎回スクリプトをコンパイルします。
C言語のようなコンパイラ言語と比べ実行速度が遅いのは、このコンパイルにかかるオーバーヘッドが大きく影響しています。
eaccelerator は、PHPスクリプトのコンパイル結果(バイトコード)をキャッシュしておき、2回目以降はそのバイトコードを利用することでコンパイルにかかるオーバーヘッドを減らし、高速化を図ります。
eaccelerator のインストール前と後で、とあるサイト(PHPが動的に生成しているサイト)のベンチマークを取ってみました。
execute_time | スクリプト実行時間 |
---|---|
memory_usage | PHPに割り当てられたメモリ |
memory_peak_usage | PHPに割り当てられたメモリの最大値 |
execute_time | memory_usage | memory_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 |
execute_time | memory_usage | memory_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/
% 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
% 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
% locate php-config5 /usr/bin/php-config5
% ./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config5
% make % sudo make install Installing shared extensions: /usr/lib/php5/20060613+lfs/
% ls /usr/lib/php5/20060613+lfs/eaccelerator.so /usr/lib/php5/20060613+lfs/eaccelerator.so*
% mkdir /tmp/eaccelerator % sudo chown www:www /tmp/eaccelerator
% cp control.php /var/www/htdocs
/** config **/ $user = "admin"; <= 変更 $pw = "eAccelerator"; <= 変更 /** /config **/
% 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/
% sudo apache2ctl restartもし、apacheが正常に起動しないときは eaccelerator.shm_size を小さくしてみる
eaccelerator.shm_size = "32"
その1)phpinfo.php を作成し、ブラウザからアクセス
<?php phpinfo(); ?> ⇒ eacceleratorセクションが出来ているか
その2)キャッシュDIR にキャッシュが生成されているか
% find /tmp/eaccelerator -type f | less
その3)control.php にブラウザからアクセス
http://example.com/control.php