APC (Alternative PHP Cache) の導入

WordPressはとっても気に入っているのですが、いかんせん動作が重たい…
PHPの塊で動いているので仕方がないという部分があるのはわかるのですが、できることはやってみようということで、高速化のための手段をちょっと調べてみました。

プラグインを含めて色々な手段があることはすぐにわかりましたが、その中で気になったのが以下のページで紹介されているAPC(Alternative PHP Cache)でした。

WordPress を高速化する5つの方法 | Sun Limited Mt.:

簡単に言えば毎回毎回生成されるPHPの中間コードをキャッシュすることにより高速化を目指すというもので、PHPで書かれたコードであればWordpressに限らずあらゆる場面で効果があります。

PHPの拡張として動作するため、レンタルサーバなどでは取りにくい対策ではありますが、逆に言えば自宅サーバならではの対策とも言えるため、まずはこちらをやってみることにします。導入については、上に紹介したページからリンクされているこのページを参考にしました。

ちなみに、環境は以下の通りです。

# uname -a
Linux www.starplatinum.jp 2.6.18-164.el5 #1 SMP Thu Sep 3 03:33:56 EDT 2009 i686

# /usr/sbin/httpd -V
Server version: Apache/2.2.3
Server built:   Sep  3 2009 17:38:51
Server’s Module Magic Number: 20051115:3
Server loaded:  APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
Architecture:   32-bit
Server MPM:     Prefork
threaded:     no
forked:     yes (variable process count)
Server compiled with….
-D APACHE_MPM_DIR=”server/mpm/prefork”
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=”/etc/httpd”
-D SUEXEC_BIN=”/usr/sbin/suexec”
-D DEFAULT_PIDLOG=”logs/httpd.pid”
-D DEFAULT_SCOREBOARD=”logs/apache_runtime_status”
-D DEFAULT_LOCKFILE=”logs/accept.lock”
-D DEFAULT_ERRORLOG=”logs/error_log”
-D AP_TYPES_CONFIG_FILE=”conf/mime.types”
-D SERVER_CONFIG_FILE=”conf/httpd.conf”

# /usr/bin/php -v
PHP 5.1.6 (cli) (built: Apr  7 2009 08:00:04)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies

まず、おもむろにpecl経由でAPCの導入を試みます。

# pecl install APC

しかし、参考ページと同じく、”phpizeがない”とエラーが出ます。そちらではそこであきらめてソースからコンパイルしていますが、同じことをやっても芸がないので、少しだけ追いかけてみます。

少しGoogle先生に聞いてみたらすぐに回答に辿り着きました。どうやら、php-develパッケージを入れればいい模様なので、yum経由でインストール。

# yum install php-devel.i386

再度上のコマンドを叩くと、今度はapxsがないと言って怒られます。こちらもすぐにGoogleで対策が見つかったので、httpd-develパッケージを同じくyumでインストール。

# yum install httpd-devel

本来であれば、Apacheのコンパイル時にapxsが有効になっていることを確認する必要がありますが、何も考えずにapxsを入れたら通ったので、いいことにします。これでAPC本体のインストールが完了しました。

続いて、APCを有効にする設定を行います。これも簡単で、以下の1行を/etc/PHP.iniに追加するだけです。場所はどこでもいいと思いますが、下の場所に入れるのが美しいでしょう。

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
;
; If you wish to have an extension loaded automatically, use the following
; syntax:
;
;   extension=modulename.extension
;
; For example:
;
;   extension=msql.so
;
; Note that it should be the name of the module only; no directory information
; needs to go here.  Specify the location of the extension with the
; extension_dir directive above.

extension=apc.so

あとはhttpdの再起動を行って、動作を確認するだけです。
phpinfo()のみを書いたPHPファイル(通常phpinfo.phpという名前になります)用意してアクセスすれば、APCが有効になっているかどうかわかります。私の環境でアクセスしたところ、

APC_on_phpinfo

こんな感じで確認できました。
最適化は何もしていない状態なので、設定値はすべてデフォルトのままです。

なお、APC導入時に/usr/share/pearに入るapc.phpをWebサーバで表示できるパスに置いてアクセスすることにより、Web経由でキャッシュのヒット状況など現状の確認ができるようになります。また、apc.phpを編集することにより、管理業務的な作業も実施できるようになります。

管理業務を行うためには基本的にログインが必要となりますので、apc.phpを編集してパスワードを設定する必要があります。認証不要で管理画面にアクセスできるように設定することも可能ですが、外部からのアクセスがない環境などを除けば、そのように設定するべきではありませんので、注意してください。

コンテンツが少ないうえに、自宅サーバとしてはかなり贅沢な環境で回しているので、正直効果は体感できませんでした….と書くことになるかと思ったら、意外にも体感できるレベルで速度が向上しました!

記事を書く時や管理画面にアクセスする時など、現状ではこのサーバの最大のヘビーユーザは自分になるわけですが、投稿のプレビューや記事間の移動のスピードが明らかに向上しました。

導入可能な環境でWordPressを運用しているのであれば、マイナスはないのでとにかく入れてみることをお勧めいたします。驚くほどパフォーマンスが向上するかもしれませんよ?

コメントする