PHP APCのインストール中に、予期しない2つの質問がありました。以前にテスト環境にAPCをインストールしたことがありますが、これらの質問は受け取りませんでした。
質問は次のとおりです。
インストールの最初の数行は次のとおりです。
# pear install pecl/apc
WARNING: channel "pecl.php.net" has updated its protocols, use "channel-update pecl.php.net" to update
downloading APC-3.1.6.tgz ...
Starting to download APC-3.1.6.tgz (148,835 bytes)
..........................done: 148,835 bytes
49 source files, building
running: phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
1. Enable per request file info about files used from the APC cache : no
1-1, 'all', 'abort', or Enter to continue:
1. Enable spin locks (EXPERIMENTAL) : no
1-1, 'all', 'abort', or Enter to continue:
building in /var/tmp/pear-build-root/APC-3.1.6
running: /var/tmp/APC/configure --enable-apc-filehits=no --enable-apc-spinlocks=no
誰かがこれらの質問が何をするか知っていますか?適切な答えは何でしょうか?
簡単な答えは、オプションは通常デフォルトのままにしておくことができ、それを「適切な」答えにすることができます。
最初のオプション(--enable-apc-filehits)は、 apc_cache_info
の「filehits」オプションの情報を収集できるようにします。基本的に、キャッシュ関連の問題をデバッグしている場合は、これを使用して、リクエストごとにキャッシュからプルされるファイルを特定できます。 apc_cache_info
ドキュメントから:
cache_typeが "filehits"の場合、現在のリクエストのバイトコードキャッシュから提供されたファイルに関する情報が返されます。この機能は、コンパイル時に-enable-filehitsを使用して有効にする必要があります。
2番目のオプション(--enable-apc-spinlocks)に関しては、 spinlocks は、常に1つのプロセスのみがリソースにアクセスすることを保証するプロセッササイクルの非効率的な方法です。 APCは、共有メモリを処理するときにロックを使用します。 APCはキャッシュを共有メモリに配置して、すべてのPHPプロセスがキャッシュを共有できるようにします。また、ロックにより、プロセスが相互にトリップしないようにします。
APC 3.1.9以降、PECLインストーラーは、メモリ保護、pthread読み取り/書き込みロック、およびpthreadミューテックスの3つの追加オプションの有効化について質問します。これらは、-enable-apc-memprotect、-enable-apc-pthreadrwlocks、および-に対応します。 enable-apc-pthreadmutex。最初の2つは実験的なラベルが付けられ、デフォルトで無効になっています。後者は有効です。
メモリ保護は、特定の状況では、共有メモリの一部の領域を読み取り専用として扱います。
Pthreadの読み取り/書き込みロックとミューテックスは代替のロックメカニズムです。 APCが現在使用できるロックメカニズムは次のとおりです。
APCがコンパイルされない場合を除いて、デフォルトのロックメカニズムを使用してください。 FacebookのBrianShireがテストしました ロックメカニズムのパフォーマンス そして2007年に結果を発表しました。彼の結果を使用して、デフォルトが失敗したときにメカニズムをロックしようとするときにガイドすることができます。
ベンチマークにABを使用する代わりに、より正確な siege を使用する必要があります。
apcが有効になっていますか?
php -i | grep apc
インストールされているからといって、phpにロードされているわけではありません。