APC の設定。PHP でのキャッシュ。
!!! 警告 !!! PHP バージョン 5.5 以降を使っている場合は APC を使わないでください――OPCache が APC を置き換え、PHP に組み込まれています。
2013 年 3 月 21 日、Zend OPCache を含む PHP 5.5 beta 1 がリリースされました――これは、OPCache が APC の公式な代替であることを強く示唆しています。PHP コアに含まれており、新しい PHP リリースごとに保守 されなければならない からです。
APC(Alternative PHP Cache)は、PHP のオペコードをキャッシュします。開発者の言葉を借りれば:「APC は、PHP の中間コードをキャッシュ・最適化するための、無料でオープンかつ堅牢なフレームワークです。」
PHP は高水準言語であり、そうした多くの言語と同様に、実行時にコンパイルされます。Drupal のような CMS は、数百から数千のスクリプトで構成されています。そのモジュール式の性質上、各ページリクエストはこれらのスクリプトの多くを読み込むことがあります。コンパイル言語とは異なり、PHP は実行時にスクリプトをバイトコードにコンパイルします。APC は、コンパイルされたバイトコードをメモリに保存することで、その後の実行をはるかに高速にする手助けをします――Drupal のパフォーマンス向上に不可欠です。
APC をインストールするには:
sudo apt-get install php-pear
sudo apt-get install php5-dev apache2-prefork-dev build-essential
sudo pecl install apc
次に、(このレッスンに付属する)apc.php スクリプトをサーバーにコピーし、Apache を再起動します:
sudo /etc/init.d/apache2 restart
http://test/apc.php にアクセスして、APC の統計を確認します。
多くのキャッシュ MISS と高いメモリ断片化が見られる場合、APC の設定は非効率です。考えられる原因:
- メモリ不足:たとえば、スクリプトが 12 MB を要するのに APC に 8 MB しか割り当てられていない場合、十分な領域がなく、MISS が発生します。
- 断片化:32 MB が割り当てられていても、断片化したメモリでは APC が大きなスクリプトを効率的に保存できないことがあります。
APC の設定ファイル(Debian/Ubuntu):/etc/php5/conf.d/apc.ini
apc.enabled=1
APC を有効にします。これを無効にすると、本番サーバーでパフォーマンスが低下することがあります。
apc.shm_segments=1 apc.shm_size=32
これらの設定は共有メモリセグメントを定義します。MISS が多いままなら apc.shm_size を増やしてください(たとえば 64、128 MB を試す)。
apc.cache_by_default=1 ;apc.filters=
すべての PHP スクリプトに対して APC キャッシュを有効にします。普遍的なキャッシュを許可するには apc.filters をコメントアウトします。
apc.cache_by_default=0 apc.filters="+drupal6"
これは APC キャッシュを Drupal 6 のファイルのみに制限します――phpMyAdmin のようなツールをキャッシュ対象から除外したい場合に便利です。
apc.stat=1
これを有効にすると、APC はファイルの更新時刻を確認します。本番では無効に、開発では有効にします。有効にしている場合は、更新後に APC キャッシュをクリアすることを忘れないでください。
apc.ttl=0
キャッシュエントリの TTL です。0 はエントリが自動的に期限切れにならないことを意味します(デフォルトは 7200 秒)。
apc.rfc1867=1
Drupal で APC を介したファイルアップロードの進捗追跡を有効にします。
apc.num_files_hint=2048
複数の Drupal サイトをホストしている場合に役立ちます。単一の Drupal インストールでも 500 以上のファイルを読み込むことがあります。あるサイトが別のサイトのキャッシュを上書きするのを防ぐために、これを高めに設定します。
設定を変更した後は、サーバーを再起動してください。最適なグラフでは、MISS 数が少なく、断片化が 0% になるはずです。