本日も乙

ただの自己満足な備忘録。

APCをソースからインストールする

PHPの処理を高速化する方法の一つとしてAPC(Alternative PHP Cache)があります。 APCとは何かというとPHPドキュメントに説明がありました。

APC 導入 - Manual

Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組みで、 フリーかつオープンに使用できます。PHP の中間コードのキャッシュ・最適化を行うための、 フリーでオープンかつ堅牢なフレームワークを提供するということを目標としています。

PHPインタプリタ型言語の為、予めコンパイルせず、PHPプログラムが呼ばれるときに中間コードにコンパイルされ実行されます。実行される度に中間コードにコンパイルするため、実行速度が遅くなる可能性があります。 APCは中間コードをメモリにキャッシュとして保存し、次同じプログラムが実行された時にキャッシュとして保存した中間コードを実行することで高速化を行うモジュールです。 PHP5.5からはOPcacheというモジュールがデフォルトでインストールされるため、APCを使う機会が今後減っていくと思いますが、PHP5.4ではまだ有効ですのでインストール方法を紹介したいと思います。

今回の目標

  • APCをソースからインストールする

サーバ環境

APCソースコードのダウンロード

http://pecl.php.net/package/APC からダウンロードするAPCを探してください。 3.1.10以降でないとPHP5.4をサポートしていませんので注意が必要です。

PECL :: Package :: APC :: 3.1.10

  • Add PHP 5.4 support (Dmitry, Anatoliy, Pierre)

今回はBetaですが、最新の3.1.13をダウンロードしました。

$ wget http://pecl.php.net/get/APC-3.1.13.tgz

解凍・インストール

# phpize使うのでrootユーザになります
$ sudo su -l
# tar zxvf APC-3.1.13.tgz
# cd APC-3.1.13
# phpize
# ./configure --enable-apc --with-php-config=/usr/local/php-5.4.16/bin/php-config
# make
# make test
# make install

# このメッセージが表示されればOK
Installing shared extensions:     /usr/local/php-5.4.16/lib/php/extensions/no-debug-non-zts-20100525/
Installing header files:          /usr/local/php-5.4.16/include/php/
  • phpizeコマンドでAPCモジュールをコンパイルしています
  • configureのオプションの--with-php-config はphp-configコマンドのフルパスを指定します

php.iniの設定

インストールしただけではAPCが有効にならないので、php.iniを修正します。

; php.ini

; 追加
extension=apc.so

Webサーバ再起動

WebサーバでAPC有効にするために再起動します。

Apacheの場合

$ sudo service httpd restart

設定の確認

$ php -m | grep apc
apc

apc が出ていれば完了です。

APCの現在の設定も見てみます。

$ 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 => 32M => 32M
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の設定はphp.iniで変更できます。

最後に

APCをソースからインストールして有効化しました。APCを有効化することで実行速度が早くなりますが、キャッシュする時間を長く取ると高速化のメリットを享受できる分、ソースコードの変更の反映に時間がかかるため、APCのキャッシュをクリアする必要があります。