ROUTE286 - http://r286.com/

2 8 6 - ROUTE286 の後継ブログ。

今後は 2 8 6 で記事投稿・ブログ公開を行います。
ROUTE286 の新たな記事投稿は行われませんが、修正等は行います。

PHP を速くする eAccelerator の設定とか。

ROUTE286 - トップ ウシの声(インターネット)
サイト連携 [RSS]

書込 - 2007年07/01/11 19:43

あけましておめでとうございます……ってもう10日過ぎていますが。^^;;;
2007 年一発目は技術話。

PHP を主に使っているサーバを運用していた結果、
コンテンツが多くなり、レスポンスが遅くなってきたんですね。
そこで、対策としてアクセラレーターを入れてみようという事で
検討した結果が eAccelerator というわけです。
mod_perl 等に近いのかな〜というと、
PHP のモジュール動作自体は mod_perl っぽいものですよね。
でも PHP は2段階で実行を行っているらしく、
そのソースを翻訳した中間コードを保管し、それを再利用する事で
実行を高速化する……という仕組みなのだそうです。
eAccelerator 以外にもいくつかあるのですが、
eAccelerator が速いし PHP5 も対応という事で。
最新のものは対応していないかもしれませんのでご確認の上で導入を。

結構簡単に入れられるんです。
phpize php-config のところは環境によって変化します。
/usr/bin/phpize とか。

tar jxvf eaccelerator-0.9.5.tar.bz2
cd eaccelerator-0.9.5
/usr/local/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/bin/php-config
make
make install


もし、phpize の結果がおかしい場合は autoconf が入っていないためです。
FreeBSD 辺りだと autoconf のために m5 も入れる……となります。
autoconf にバージョン番号が含まれて認識されない事もあるので、
その場合は含まれていない名前に改名したり、シンボリックリンクにしたりします。

make install の結果として
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20020429 という感じに出てきます。
これは php.ini の設定で用います。他の設定もまとめてこんな感じに追加します。
以下はキャッシュ 10 分、16M という感じ。専用サーバでサイトが少ないところの例です。

[eaccelerator]
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20020429/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.allowed_admin_path="/home/
[ユーザ名]/www/control.php"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="600"
eaccelerator.shm_prune_period="600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"


cache_dir の生成を忘れなく。
Apache が読み書きできるようにしておきます。

mkdir /tmp/eaccelerator
chown
apache /tmp/eaccelerator
chgrp
apache /tmp/eaccelerator

これで Apache を再起動すれば eAccelerator が動作しはじめます。
一度 PHP を見た時は普通だと思いますが、2回目はスパッと出てくるかと思います。
最初の時にキャッシュに嵌り、2回目はキャッシュから表示する形になるわけですね。
実際 PHP を多様しているサーバに eAccelerator を入れてみたところ、
レスポンスに数秒〜数十秒生じていたサーバで1〜3秒で返ってきています。


キャッシュの状況は管理メニューから参照できます。
2.0.4 では管理メニューが eaccelerator.php となっていたのですが、
2.0.5 からは control.php となっています。
合わせてID・パスワードは php.ini 等に含める形から control.php 内に変わっています。
これは PHP のセキュリティ問題に対応し、変更したものであるようですね。
キャッシュが満杯になってしまう場合は shm_size の値を増やしましょう。
管理メニューから動作を無効にしたり、キャッシュを削除する等の設定もできます。

ただ、全ての PHP が完全に動作するわけではなく、
状況によっては正常に動作しないものがあります。
最初は動作するけど、後に真っ白になってしまうような……
特定ができる場合はそこだけキャッシュを無効にすれば良いのですが、
これは .htaccess を用いて実現できます。

php_flag eaccelerator.enable 0
php_flag eaccelerator.optimizer 0


この逆にバーチャルホストで利用しているサーバであれば、
php.ini は無効にしておき、
キャッシュさせたいところを .htaccess という形でも良いわけです。
この方法以外に eaccelerator.filter に設定を記載する方法もあるのですが、
一図した動作になっていない模様。どうも 0.9.5 では不都合があるようです。
でも .htaccess で確実に場所指定ができるのでこれで良いのではないかな〜と。

そうそう、PHP 等をバージョンアップした際に
eAccelerator との動作が変化し、動作しなくなる事があるようなので、
バージョンアップした際はご注意を。

eAccelerator

コメント・トラックバック ( 0 )

トラックバックURL: http://r286.com/katari/664
(日本語・文字コード自動判別)
トラックバックを正常に行っていないものや悪質性があるもの等は編集・削除する場合があります。
逆に内容の良い記事からのトラックバックや興味を持ったコメント等は
ADMIN @ ROUTE286 がツッコミを入れている事があります。
ROUTE286 上で公開されなくない返事や運営者へのお問い合わせ等は こちらのフォーム を用いて下さい。
以下のフォームはコメントでの利用ははもちろん、
トラックバック機能がない blog で以下のフォームをトラックバック代わりにしていただいても結構です。



表題 / 題名


概要 / 内容


サイト(ウェブログ)URL 省略可


サイト(ウェブログ)名 / 名前


「route/664」を半角で入力して下さい





ROUTE286 はオリジナルのシステムで動作しています。
Presented by ROUTE286. ROUTE286 トップ お問い合わせ