それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

APCとZend Optimizerを同時に入れていた。

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の高速化モジュールの動作はこんな感じ。

JSPServletに変換され、Classにコンパイルされるように、PHPバイトコードにコンパイルされ、コンパイル済みを実行する。それを早くするらしい。JavaでいうClassを作るわけだね。ロード済みファイルをメモリに常駐させて何度もロードせずに、アクセスを高速化するらしい。ApplicationScopeにあるJavaBeansみたいなもんかなぁ。javacがやってくれるような、ソースの最適化をして高速化を図る。ってのもあるようだ。

eAccelerator はロード済みファイルのメモリキャッシュ
バイトコードキャッシュはAPC
ZendOptimizerはソースの最適化


がそれぞれの特徴だったと思うけど、バイトコードキャッシュはどのモジュールでもやってるっぽいし。細かい動作はわからない。。。


Smarty入れてるならHTMLレンダリングバイトコードキャッシュは効きそうだなぁ。
Class毎に分割してるなら、eAccerlarorが効きそうだ。

apache bench でベンチしたいけれど、実験してみたいアプリがない。

そのうち試そう。