WordPress

WordPressチューニング: APC導入

前回の記事でボクのブログが遅い理由はPHPであるところまでは切り分けできた。WordPressのキャッシュ・プラグインを使うのがすぐに思いつくけど、自宅サーバー監視に使っているZabbixもPHPアプリケーションで、こちらの速度もちょっと気になっていたので、まずはすべてのPHPアプリケーションに効果があるAPC (Alternative PHP Cache) を導入することにした。APCはアクセスのたびにPHPコードをコンパイルするのではなく、その中間コードをキャッシュ / 最適化することで高速にしている。

以下では CentOS 5.7 を使用しているが、Red Hat Enterprise Linux (RHEL) / Oracle Linux (OL) / Scientific Linux (SL) でも同様だろう。PHPはCentOSに含まれるパッケージではなく、IUS Community Project のphp53u.rpmを使用している。php53uのインストールについては 複眼中心: CentOS 5.6 で PHP 5.3.6 にアップグレード を参照してほしい。

IUS Community Project もAPCのパッケージを提供しているので、Yumから簡単にインストールできる。IUSを使っていない場合のパッケージ名はphp-pecl-apcになる。

httpdを再起動するとAPCモジュールが読み込まれる。

APCモジュールが読み込まれたかどうかはphpinfo()でも分かるが、APCには監視画面があるので、それを使ってみよう。

http://hostname/apc.php にWebブラウザーからアクセスすると、以下のような監視画面が表示される。右側のグラフが表示されない場合はphp53u-gd.rpm (php-gd.rpm) をインストールしよう。

APC

WordPressで何枚かのページを見てから監視画面のボタン「Refresh Data」を押すと Cached Files の値が増えており、APCがキャッシュしていることが分かる。

System Cache Entries のファイル・パスと User Cache Entries はログインしないと表示されないので、ログイン用ユーザーを設定しよう。apc.phpと同じディレクトリに以下のようなapc.conf.phpを作成し、ADMIN_USERNAMEADMIN_PASSWORDを好きなものに設定する。

ただ、このままでは一部のページは見られないものの情報の多くが誰でも見えてしまうため、ボクはBASIC認証を別にかけている。apc.php内の認証を使わない場合は以下のように設定する。

監視画面をしばらく見てると Cache full count の値が増えていくかもしれない。これは割り当てたキャッシュ容量がすべて使われたために、キャッシュが一度すべて解放された回数を示す。つまり、この値が頻繁に増えるということはキャッシュしている意味がないので、そのような場合はapc.shm_sizeを増やそう。ボクのWordPress環境では最大で50MBくらいがキャッシュされるので、64MBに設定することで Cache full count は常にゼロになっている。

APCによってどれだけ性能向上したかabを実行してみよう。APC導入前の Requests per second が0.56#/secだったので、0.92#/secということは1.5倍程度の性能向上が実現できたことになる。

しかしまだこれでは目標の20#/secに達していないので、WP Super Cache も導入することにした。つづきは 複眼中心: WordPressチューニング: WP Super Cache 導入 で。