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.filters | NULL | PHP_INI_SYSTEM | |
apc.mmap_file_mask | NULL | PHP_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 |
以下に設定ディレクティブに関する 簡単な説明を示します。
apc.enabled を 0 にすることで APC を無効にできます。 APC が静的にコンパイルされて PHP に組み込まれており、他に無効にする 手段がない場合などに有用です(DSO としてコンパイルされている場合は、 単に php.ini の中の extension という行をコメントアウトするだけで無効にできます)。
コンパイラキャッシュのために割り当てる共有メモリセグメントの数。 APC が割り当て済みの共有メモリを使い切ってしまっているが すでにシステムが許す限り apc.shm_size を拡大している といった場合に、この値を大きくすることを試みます。
個々の共有メモリセグメントの大きさを MB 単位で指定します。 デフォルトで、共有メモリセグメントの大きさが非常に小さく設定されている システムもあります(大半の BSD 系システムがこれに含まれます)。
最適化レベル。ゼロは最適化を無効にし、値を大きくするほど 最適化のレベルが高くなります。わずかながら速度の向上が 期待できます。この項目は実験的なものです。
Web サーバで読み込まれるソースファイルの総数についての 「ヒント」。よくわからない場合はゼロを指定するか、単に 無視してください。何千ものソースファイルを扱っているような サイトで有用です。
キャッシュされているエントリが、他のエントリに割り当てられるまで スロットに残っていることの可能な秒数。ゼロのままにしておくと、 キャッシュの中身が古いエントリでいっぱいになってしまい、 新しいエントリがキャッシュできなくなります。
キャッシュエントリがガベージコレクションのリストに残り続ける秒数。 ソースファイルのキャッシュ中にサーバプロセスが死んだ場合の安全装置と なります。ソースファイルが変更された場合、メモリに割り当てられている 古いバージョンはこの TTL に達するまで再読み込みされません。 この機能を無効にするには、ゼロを設定します。
デフォルトで On です。しかし、これを Off にして + で始まる apc.filters とともに使用することで、フィルタに一致したファイルのみを キャッシュすることが可能です。
カンマで区切られた、POSIX 拡張正規表現のリスト。ソースファイル名が いずれかのパターンにマッチした場合、そのファイルはキャッシュされません。 マッチングに使用されるファイル名は include/require に渡される名前であり、 絶対パスではないことに注意しましょう。正規表現が + で 始まっている場合、その条件にマッチするファイルはキャッシュされます。 また - で始まっている場合は、条件にマッチするファイルは キャッシュされません。デフォルトは - なので、これは 省略可能です。
--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 を 75 に設定すると、プロセスがキャッシュされていないファイルをキャッシュする 処理を 75% の確率で抑えられます。つまり、この値を大きく設定することで キャッシュ処理の混雑を防ぐことが可能です。値を 0 に設定すると、この機能が無効になります。
稼動中の Web サーバ上のファイルを書き換える場合、それを原始的(atomic) な手段で行うべきです。つまり、まずいったん一時ファイルに書き込み、 準備ができた時点でそれをリネーム(mv)して 正しい位置に移動します。多くのテキストエディタや cp、tar その他の プログラムはこの方式ではありません。ということは、ファイルの書き込み中に そのファイルがアクセスされる(そしてキャッシュされる)可能性がある わけです。apc.file_update_protection は、 新しいファイルをキャッシュするまでの遅延を設定します。デフォルトは 2 秒で、ファイルの更新時刻(mtime)がアクセス時刻と 2 秒未満しか違わない場合はファイルをキャッシュしないという意味です。 更新の最中のファイルにアクセスしてしまった不幸な人には変なデータが 見えてしまいますが、少なくともその変な状態がキャッシュされてしまう ことはありません。rsync などの原始的な更新を保証する方式を利用する ことがわかっている場合は、値を 0 に設定することでこの機能を無効に できます。更新処理に 2 秒以上かかるようなシステムを利用している 場合は、この値をもう少し大きくしたくなるかもしれません。
たいていは、テストやデバッグ用に使用します。これを設定すると CLI バージョンの PHP で APC を有効にします。通常は、すべての CLI リクエストに対して APC キャッシュを作成/格納/削除したいとは 思わないでしょう。しかし、CLI バージョンの APC を簡単に作成できるように しておくことは、多くのテストシナリオで有用です。
リソース型は定義されていません。
定数は定義されていません。