III. Alternative PHP Cache (APC)

導入

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

インストール手順

この PECL 拡張 モジュールは PHP にバンドルされていません。

新規リリース・ダウンロード・ソースファイル・管理者情報・ CHANGELOG といった関連する情報については、次の場所にあります。 http://pecl.php.net/package/apc.

この PECL 拡張モジュール の DLL PHP ダウンロード ページ または http://snaps.php.net/ からダウンロードできます。

注意: Windows 版の APC では、c:\tmp が存在し、 Web サーバがそのフォルダへの書き込み権限を有することを想定しています。

注意: さらに深く踏み込んだ高度な技術情報は、 developer-supplied TECHNOTES file を参照ください。

実行時設定

php.ini の設定により動作が変化します。

たいていの場合はデフォルトの APC 設定でうまく動作しますが、 きちんとチューニングをしたい場合は以下のパラメータを設定します。

表 1. APC の設定オプション

名前デフォルト変更の可否変更履歴
apc.enabled"1"PHP_INI_ALL 
apc.shm_segments"1"PHP_INI_SYSTEM 
apc.shm_size"30"PHP_INI_SYSTEM 
apc.optimization"0"PHP_INI_ALL 
apc.num_files_hint"1000"PHP_INI_SYSTEM 
apc.ttl"0"PHP_INI_SYSTEM 
apc.gc_ttl"3600"PHP_INI_SYSTEM 
apc.cache_by_default"1"PHP_INI_SYSTEM 
apc.filtersNULLPHP_INI_SYSTEM 
apc.mmap_file_maskNULLPHP_INI_SYSTEM 
apc.slam_defense"0"PHP_INI_SYSTEM 
apc.file_update_protection"2"PHP_INI_SYSTEM 
apc.enable_cli"0"PHP_INI_SYSTEM> APC 3.0.6
PHP_INI_* 定数の詳細および定義については 付録G を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

apc.enabled boolean

apc.enabled を 0 にすることで APC を無効にできます。 APC が静的にコンパイルされて PHP に組み込まれており、他に無効にする 手段がない場合などに有用です(DSO としてコンパイルされている場合は、 単に php.ini の中の extension という行をコメントアウトするだけで無効にできます)。

apc.shm_segments integer

コンパイラキャッシュのために割り当てる共有メモリセグメントの数。 APC が割り当て済みの共有メモリを使い切ってしまっているが すでにシステムが許す限り apc.shm_size を拡大している といった場合に、この値を大きくすることを試みます。

apc.shm_size integer

個々の共有メモリセグメントの大きさを MB 単位で指定します。 デフォルトで、共有メモリセグメントの大きさが非常に小さく設定されている システムもあります(大半の BSD 系システムがこれに含まれます)。

apc.optimization integer

最適化レベル。ゼロは最適化を無効にし、値を大きくするほど 最適化のレベルが高くなります。わずかながら速度の向上が 期待できます。この項目は実験的なものです。

apc.num_files_hint integer

Web サーバで読み込まれるソースファイルの総数についての 「ヒント」。よくわからない場合はゼロを指定するか、単に 無視してください。何千ものソースファイルを扱っているような サイトで有用です。

apc.ttl integer

キャッシュされているエントリが、他のエントリに割り当てられるまで スロットに残っていることの可能な秒数。ゼロのままにしておくと、 キャッシュの中身が古いエントリでいっぱいになってしまい、 新しいエントリがキャッシュできなくなります。

apc.gc_ttl integer

キャッシュエントリがガベージコレクションのリストに残り続ける秒数。 ソースファイルのキャッシュ中にサーバプロセスが死んだ場合の安全装置と なります。ソースファイルが変更された場合、メモリに割り当てられている 古いバージョンはこの TTL に達するまで再読み込みされません。 この機能を無効にするには、ゼロを設定します。

apc.cache_by_default boolean

デフォルトで On です。しかし、これを Off にして + で始まる apc.filters とともに使用することで、フィルタに一致したファイルのみを キャッシュすることが可能です。

apc.filters string

カンマで区切られた、POSIX 拡張正規表現のリスト。ソースファイル名が いずれかのパターンにマッチした場合、そのファイルはキャッシュされません。 マッチングに使用されるファイル名は include/require に渡される名前であり、 絶対パスではないことに注意しましょう。正規表現が + で 始まっている場合、その条件にマッチするファイルはキャッシュされます。 また - で始まっている場合は、条件にマッチするファイルは キャッシュされません。デフォルトは - なので、これは 省略可能です。

apc.mmap_file_mask string

--enable-mmap を用いて MMAP サポートつきで コンパイルされている場合、ここで mktemp 形式のファイルマスクを 指定します。mmap モジュールは、mmap されたメモリ領域をファイルに 置くか共有メモリに置くかを、これによって判断します。 ファイルベースの mmap を使用するには、この値を /tmp/apc.XXXXXX (正確に 6 つの X)のように指定します。 POSIX 形式の shm_open/mmap を使用するには、.shm をマスクのどこかで指定します。例: /apc.shm.XXXXXX 。 また、/dev/zero を指定することで、カーネルの /dev/zero インターフェースを使用した anonymous mmap を使用することもできます。未定義の場合は、この方式が用いられます。

apc.slam_defense integer

非常にアクセスの多いサーバでは、サーバを起動したりファイルを書き換えたり するたびに「多くのプロセスが」「同時に」「同じファイルを」キャッシュ しようとすることになります。このオプションを指定すると、ある一定の パーセンテージでファイルをキャッシュせずに利用するようにします。 あるいは、単一のプロセスがキャッシュ処理をスキップする確率と 考えることもできます。 たとえば、apc.slam_defense75 に設定すると、プロセスがキャッシュされていないファイルをキャッシュする 処理を 75% の確率で抑えられます。つまり、この値を大きく設定することで キャッシュ処理の混雑を防ぐことが可能です。値を 0 に設定すると、この機能が無効になります。

apc.file_update_protection integer

稼動中の Web サーバ上のファイルを書き換える場合、それを原始的(atomic) な手段で行うべきです。つまり、まずいったん一時ファイルに書き込み、 準備ができた時点でそれをリネーム(mv)して 正しい位置に移動します。多くのテキストエディタや cp、tar その他の プログラムはこの方式ではありません。ということは、ファイルの書き込み中に そのファイルがアクセスされる(そしてキャッシュされる)可能性がある わけです。apc.file_update_protection は、 新しいファイルをキャッシュするまでの遅延を設定します。デフォルトは 2 秒で、ファイルの更新時刻(mtime)がアクセス時刻と 2 秒未満しか違わない場合はファイルをキャッシュしないという意味です。 更新の最中のファイルにアクセスしてしまった不幸な人には変なデータが 見えてしまいますが、少なくともその変な状態がキャッシュされてしまう ことはありません。rsync などの原始的な更新を保証する方式を利用する ことがわかっている場合は、値を 0 に設定することでこの機能を無効に できます。更新処理に 2 秒以上かかるようなシステムを利用している 場合は、この値をもう少し大きくしたくなるかもしれません。

apc.enable_cli integer

たいていは、テストやデバッグ用に使用します。これを設定すると CLI バージョンの PHP で APC を有効にします。通常は、すべての CLI リクエストに対して APC キャッシュを作成/格納/削除したいとは 思わないでしょう。しかし、CLI バージョンの APC を簡単に作成できるように しておくことは、多くのテストシナリオで有用です。

リソース型

リソース型は定義されていません。

定義済み定数

定数は定義されていません。

目次
apc_cache_info --  APC のデータから、キャッシュされた情報(およびメタデータ)を取得する
apc_clear_cache --  APC キャッシュをクリアする
apc_define_constants --  後で利用するため、そして大量の定義を一括して行うために 複数の定数を一括定義する
apc_delete --  格納されている変数をキャッシュから取り除く
apc_fetch --  格納されている変数をキャッシュから取得する
apc_load_constants --  定数群をキャッシュから読み込む
apc_sma_info --  APC の共有メモリ割り当てに関する情報を取得する
apc_store --  変数をデータ領域にキャッシュする