Pocket

WordPressのパフォーマンスを上げる為、APCを導入しました

  • add this entry to hatena bookmark

あるWordPressサイトの表示速度が遅い為、色々設定を見直していました。いくつかの原因ぽい箇所の対策を施したついでに、導入していなかったAPCを入れる事にしました。

APCは「Alternative PHP Cache」の頭文字で、PHP処理を高速化するPHPアクセラレータです。

PECLの拡張モジュールであり、PHPを中間コードの状態でメモリにキャッシュし、次回アクセス時に高速化できます。

※ Nginxの導入も考えたのですが、まずはAPCを導入する事にしました。

1.インストール

APCのインストール方法はいくつかあるみたいですが、今回は pecl でインストールしました。

「pecl list」と「pecl install APC」コマンド実行結果を以下に記載します。

# pecl list
(no packages installed from channel pecl.php.net)
# pecl install APC
downloading APC-3.1.13.tgz ...
Starting to download APC-3.1.13.tgz (171,591 bytes)
.....................................done: 171,591 bytes
55 source files, building
running: phpize
Configuring for:
PHP Api Version:         20100412
Zend Module Api No:      20100525
Zend Extension Api No:   220100525
Enable internal debugging in APC [no] :
Enable per request file info about files used from the APC cache [no] :
Enable spin locks (EXPERIMENTAL) [no] :
Enable memory protection (EXPERIMENTAL) [no] :
Enable pthread mutexes (default) [no] :
Enable pthread read/write locks (EXPERIMENTAL) [yes] :
building in /tmp/pear/temp/pear-build-rootAz80bD/APC-3.1.13

(中略)

Build process completed successfully
Installing '/usr/local/include/php/ext/apc/apc_serializer.h'
Installing '/usr/local/lib/php/extensions/no-debug-zts-20100525/apc.so'
install ok: channel://pecl.php.net/APC-3.1.13
configuration option "php_ini" is not set to php.ini location
You should add "extension=apc.so" to php.ini
#
# pecl list
Installed packages, channel pecl.php.net:
=========================================
Package Version State
APC     3.1.13  beta
#

以上で、APC 3.1.13 がインストールできました。

2.php.ini

次に php.ini に APC の設定を行います。

私は以下の設定を行いました。

[apc]
extension=apc.so
apc.enabled=1
apc.shm_size=64M

設定値の詳細は、http://php.net/manual/ja/apc.configuration.php に記載があります。

なお、apc.so の配置パスは以下になりますので、extension での指定は上記で大丈夫です。

$ locate apc.so
/usr/local/lib/php/extensions/no-debug-zts-20100525/apc.so
$

設定後は、apache を再起動します。

ちなみに、php で apc の認識状況は以下のコマンドで確認できます。表示されればOKです。

# php -i | grep apc
apc
apc.cache_by_default => On => On
apc.canonicalize => On => On
apc.coredump_unmap => Off => Off
apc.enable_cli => Off => Off
apc.enabled => On => On
apc.file_md5 => Off => Off
apc.file_update_protection => 2 => 2
apc.filters => no value => no value
apc.gc_ttl => 3600 => 3600
apc.include_once_override => Off => Off
apc.lazy_classes => Off => Off
apc.lazy_functions => Off => Off
apc.max_file_size => 1M => 1M
apc.mmap_file_mask => no value => no value
apc.num_files_hint => 1000 => 1000
apc.preload_path => no value => no value
apc.report_autofilter => Off => Off
apc.rfc1867 => Off => Off
apc.rfc1867_freq => 0 => 0
apc.rfc1867_name => APC_UPLOAD_PROGRESS => APC_UPLOAD_PROGRESS
apc.rfc1867_prefix => upload_ => upload_
apc.rfc1867_ttl => 3600 => 3600
apc.serializer => default => default
apc.shm_segments => 1 => 1
apc.shm_size => 64M => 64M
apc.shm_strings_buffer => 4M => 4M
apc.slam_defense => On => On
apc.stat => On => On
apc.stat_ctime => Off => Off
apc.ttl => 0 => 0
apc.use_request_time => On => On
apc.user_entries_hint => 4096 => 4096
apc.user_ttl => 0 => 0
apc.write_lock => On => On
#

以上で、APC が導入された形になります。

3.APCのWeb管理画面

APCの利用状況を、Web画面から確認できるようにできます。

APCのインストールによって、apc.php も配置されています。apc.php を Web公開ディレクトリに配置します。

# cp /usr/local/lib/php/apc.php /usr/local/apache2/htdocs/

apc.php の以下のアカウント情報を適当に変更してください。

defaults('ADMIN_USERNAME','admin');
defaults('ADMIN_PASSWORD','password');

Web管理画面である apc.php にブラウザでアクセスすると以下の画面が表示されます。

apc-gui

この画面を見ながら、状況を把握し、必要に応じて php.ini に設定しているapc設定を行う形になるかと思います。

なお、http://php.net/manual/ja/apc.configuration.php によると、画面左側にある「Cache full count」の値に注目すると良いそうです。この値はキャッシュがいっぱいになった為に強制削除が行われた回数を表します。 この値ができるだけ小さくなるようにキャッシュを設定する形になります。

APCの導入効果は、数日後に判断できるかと思います。導入したばかりの現状は速いです。ですが、apache 再起動や、その他の微妙な設定変更も行っているので、APCの導入効果かはまだ不明です。

とりあえず、APCの導入方法のお知らせでした。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。