HTML ページキャッシュ用のプラグイン wp-cache に続いて、PHP アクセラレータの中から APC (Alternative PHP Cache) を導入、効果を計測してみました。
動作環境
- CentOS 5.3
- PHP 5
PHP を高速化する PHP アクセラレータ
wp-cache は、最終的に生成された HTML ページコンテンツをキャッシュしておくためのプラグインでしたが、APC は名前の通り PHP に対してはたらく「PHP アクセラレータ」です。
PHP はサーバサイドで動作するスクリプト言語ですが、バイトコード ((Bytecode: 中間コードなどとも呼ばれる)) に変換し実行しています。Perl もそうです。
WordPress も PHP で書かれた巨大なスクリプトのカタマリですが、毎回同じ *.php スクリプトを構文解釈、バイトコードに変換、とやっているから遅くなります。一回バイトコードになったものは、やはり期限付きでキャッシュしておけば、二度手間が省けて早いじゃん、というのがバイトコードキャッシュです。
PHP アクセラレータは、バイトコードキャッシュと、さらにバイトコードの無駄を省いて最適化するといった付加機能を持っています。代表的なものに APC, eAccelerator, XCache があります。どれにするか悩みどころですが、APC は
- CentOS からインストールしやすい
- パフォーマンスの点でも他の PHP アクセラレータより良さそう
- 安定性について特に悪評を聞かない ((ここはもう少し評価が必要か))
- 次期 PHP 6 の core に採用される予定
私の場合は、インストールのしやすさ、パフォーマンスと安定性の点で評判の高い APC を使ってみました。
APC のインストール
インストールしやすいとは言っても、yum 一発で終了というわけにはいかず。まず pecl ((PHP Extension Common Library. Perl で用意されている CPAN みたいなもんでしょうか)) が動作するために必要なライブラリを yum っておき、pecl を通じて APC をインストール、と二段構えになります。
下記は pecl で必要そうなものをまとめて yum するように書いていますが、gcc, httpd-devel といった基本的なものは、すでに入っている可能性が高いかもしれません。
[code]
# yum -y install php-devel php-pear gcc httpd-devel
# pecl install apc
downloading APC-3.0.19.tgz …
Starting to download APC-3.0.19.tgz (115,735 bytes)
…..
Use apxs to set compile flags (if using APC with Apache)? [yes] :
…..
Build process completed successfully
Installing ‘/var/tmp/pear-build-root/install-APC-3.0.19//usr/lib/php/modules/apc.so’
install ok: channel://pecl.php.net/APC-3.0.19
You should add "extension=apc.so" to php.ini
[/code]
php.ini に一行書き加えろと言われますが、ここではメンテ性を考えて /etc/php.d に個別の .ini ファイルとして追加します。最後に httpd を再起動して終了。
[code]
# echo "extension=apc.so" >/etc/php.d/apc.ini
# /etc/init.d/httpd restart
[/code]
分かってしまえば手順はこれだけです。
APC が組み込まれたことを確認
名前はなんでも良いですが、以下のような test.php を仮に作成し、http://……./test.php でアクセスしてみます。
[code language=”php”]
<?php phpinfo(); ?>
[/code]
だらだら長い info の中から “apc” のセクションを探して、
Enabled となっていれば OK。phpinfo(); は誰からでも読める状態だと、セキュリティ上好ましくないため消しておきます。
[code]
# rm test.php
[/code]
APC の効果は?
体感的に一番デカいのは、WordPress の管理画面が速くなることでしょう。投稿の一覧、「画像を追加」のポップアップ、すべてがキビキビと動くようになります 🙂 一度入れてみるともう APC なしには戻れません。
では、ブログの読者からはどうなのか。
wp-cache と同様、http://www.nire.com/ トップページをリクエストして、結果が帰ってくるまでの時間を “ab” で計測してみました。
キャッシュがない状態での所要時間を 100% として、APC があると 82.75% と、2割近くの時間短縮です。
wp-cache があれば、できあがった HTML コンテンツをキャッシュから送り出すだけだから、APC なんて余計なもの要らないのでは? という仮説もあると思うので、wp-cache + APC 併用をさらに比較。
キャッシュなしを同様に 100% とすると、wp-cache 単体で 0.25% かかっていたのが、wp-cache + APC では 0.11% と、半分の時間になります。
速くなるのは嬉しいのですが、ちょっと不思議ですね。ということで、次回に続く。
0件のコメント
5 件のピンバック