APCとZendOptimizerは同時に動かないはず。両方入れて、php.iniで設定外したはずが。そのまま。PHPが初回ロードはうまくいくが2回目から動かないのでおかしいなと思ってた。Apacheの設定を探した。よく考えたらキャッシュをうまくハンドル出来ないので2回目からエラーで落ちるわけだ。
ウノウラボを参考に、eAccelerator+Zend Optimizerにした。
参考 http://labs.unoh.net/2006/05/phpweb.html
インストールのために、使ったコマンド
#>tar jxvf eaccelerator-0.9.5.tar.bz2 #>cd eaccelerator-0.9.5/ #>phpize #>./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config #>make #>sudo make install
php.ini を編集
[eaccelerator] zend_extension="/usr/lib/php5/eaccelerator.so" eaccelerator.shm_size = "32" eaccelerator.cache_dir = "/var/tmp" 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" [Zend Optimizer]
so の場所は、php の extension_dir になる。
phpinfo(); pear config-show
とかでわかる。
キャッシュ用のtemporaryを用意してやる。permissionが書き込み可能なら別に何処で良いけど。
これが重要なのだけれど、Zend Optimzierの設定は eAcceleratorの後ろに書いてやる。なぜかこれをしないと動作しない。
あとで気づいたのだが、APCの設定の後に、eAccelerator その後に Zend Optimizerを書いたらなぜか動作した。APCとeAccleratorとZendが同時に動いてる。ちょっと気持ち悪い。これは、どういう動きになるんだろうな。キャッシュはどうなるなるんだろう。バイトコードキャッシュを複数使って早くなる?そんなわけないよなぁ。。。
Xcacheなるキャッシュもあるらしい。
PHPの高速化モジュールの動作はこんな感じ。
JSPがServletに変換され、Classにコンパイルされるように、PHPがバイトコードにコンパイルされ、コンパイル済みを実行する。それを早くするらしい。JavaでいうClassを作るわけだね。ロード済みファイルをメモリに常駐させて何度もロードせずに、アクセスを高速化するらしい。ApplicationScopeにあるJavaBeansみたいなもんかなぁ。javacがやってくれるような、ソースの最適化をして高速化を図る。ってのもあるようだ。
eAccelerator はロード済みファイルのメモリキャッシュ
バイトコードキャッシュはAPC
ZendOptimizerはソースの最適化
がそれぞれの特徴だったと思うけど、バイトコードキャッシュはどのモジュールでもやってるっぽいし。細かい動作はわからない。。。
Smarty入れてるならHTMLレンダリングのバイトコードキャッシュは効きそうだなぁ。
Class毎に分割してるなら、eAccerlarorが効きそうだ。
apache bench でベンチしたいけれど、実験してみたいアプリがない。
そのうち試そう。