いまさらAPCをインストールして、PHPの実行を高速化してみた
Posted: Updated:
APC(Alternative PHP Cache)とは
Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組みで、 フリーかつオープンに使用できます。PHP の中間コードのキャッシュ・最適化を行うための、 フリーでオープンかつ堅牢なフレームワークを提供するということを目標としています。 ( PHP: 導入 - Manual )
スクリプトを起動するたびに、実行コードにコンパイルしている部分を、元のスクリプトに変更が無い限り(※)キャッシュして使い回すカタチで、PHPの全般的な実行を高速化する仕組みです。
※スクリプトの変更の有無を確認する・しないのオプション ( apc.stat ) も別途で存在し、それを確認しないようにすると、その分さらにパフォーマンスが向上します。
今回は、さくらのVPS標準のCentOS 5.5と、「とあるさくらのVPS (5) 標準のCentOS 5.5で、PHPを5.1.6から5.2.xにする」でアップデート済みのPHP5.2.14の組み合わせで動作を確認しています。
早速yumでインストール
% yum search apc
iasl.x86_64 : Intel ASL compiler/decompiler
perl-Mail-IMAPClient.noarch : An IMAP Client API
php-pecl-apc.x86_64 : APC caches and optimizes PHP intermediate code
yumにapcが含まれているか確認したところ、php-pecl-apcとして発見。これをインストールします。
% sudo yum install php-pecl-apc
Running Transaction
Installing : php-pecl-apc 1/1
Installed:
php-pecl-apc.x86_64 0:3.1.2-1.el5.art
Complete!
これですぐに有効になります。自分は、念のためhttpdをrestartしました。インストール直後に、php.iniにextension=apc.soと追記したら応答しなくなってしまいました。yumで入れた瞬間からすでに有効なようです。
phpinfoで確認する
phpinfo()で確認すると、以下のようにAPCの項目が確認できます
APCの管理画面を使おう
APCには管理画面スクリプトが含まれています、apc.phpという名前らしいので探してみます。
% sudo find / -name apc.php
/usr/share/doc/php-pecl-apc-3.1.2/apc.php
% cd /usr/share/doc/php-pecl-apc-3.1.2
% cp apc.php /hogehoge/public_html/apc.php
発見できたapc.phpを、公開ディレクトリにコピーします。
apc.phpと同じディレクトリにapc.conf.phpという名前で、以下の内容のファイルを作成します。
<?php
if ( !in_array(@$_SERVER['REMOTE_ADDR'], array('xxx.xxx.xxx.xxx', 'xxx.xxx.xxx.xxx')) ) die();
defaults('ADMIN_USERNAME','user');
defaults('ADMIN_PASSWORD','password');
ユーザー名とパスワードは任意で設定。自分は念のため簡易で、IP制限も追加しました。
APCの稼働状態をブラウザからモニタできます
apc.phpにアクセスすると、下のような画面が表示されるようになります。
なんだか面白いですね。一番右のHits&Missesは、キャッシュ済みのPHPが実行された率と、まだキャッシュされていないPHPが実行された率と思われます。実行後しばらしくしたら、あっという間に今のような状態になりました。
サーバー自体のステータスを見ても、自分の環境だと導入前と比べてメモリ使用量が25%減になりました。メモリ周りだけを見る分には、なかなかめざましい効果をあげています。
追記:勘違いだった気がしてきたので消しておきます。体感速度は上がってるんですが、メモリの使い方が変わっただけなのような。
もうちょっと負荷の高い自前のコンテンツを持って、効果の程を確認してみたいですね。(このブログはそんなにアクセスないので...)
今度は、最適化の効果を確認できるベンチマーク手法も調べないと。これから先、導入の効果を分かりやすく、レスポンスタイムの推移を実測データで示せるようにしたいところ。何か良いの無いかな? ではでは。
参考サイト
- APC(Alternative PHP Cache)再び - Do You PHP?
- PHP: 実行時設定 - Manual
- むしろ WordPress の管理画面が爆速になる APC (Alternative PHP Cache) - Nire.Com
Wordpressだと管理ページでめざましい効果があがるらしいです。ふむふむ。