2009-07-26 11 views
5

私は大量のWebサーバーファームで、ほとんどのリクエストで約100ファイルを含む動的なPHPコードを提供しています。 APC opcodeキャッシュが有効になっており、include_once_overrideが有効になっていて、キャッシュに64MBのRAMを割り当てていますが、Apacheのプロセスをstraceするとopen()とstat()キャッシュから引き出される。私はキャッシュの統計情報で、キャッシュが占有されており、100%ヒット率で使用されていることがわかります。誰も洞察力を提供することはできますか?APCが有効になっていますが、Apacheはまだファイルを開いていますか?

+0

あなたはinclude_once_overrideの有無にかかわらずサーバーのベンチマークを行いますか? – hobodave

+0

ありがとう!はい、私はベンチマークの有無にかかわらず、目立った違いは見られませんでした。絶対パスを実装した後ではstat()の方がはるかに少なくなりましたが、私が含まれているすべてのファイルに対してaccess() apc.stat = 0.これは正常ですか?なぜファイルにアクセスする必要がありますか? – Will

+0

ファイルの最初のインクルードが表示されていませんか?どのバージョンを使用していますか? APCは歴史的にinclude_once_overrideで問題を抱えていました。また、答えを使用するのではなく、回答を元の質問に編集してください。 – hobodave

答えて

7

アプリケーションにインクルードするすべてのパス名を使用していることを確認してください。 APCのドキュメントごと:

apc.stat整数

、この設定を変更することに注意してください。これはデフォルトではオンになっており、APCは各リクエストのスクリプトを修正(チェック)して修正済みかどうかを判断します。変更されている場合は、新しいバージョンを再コンパイルしてキャッシュします。この設定がオフの場合、APCはチェックしません。これは通常、APCにファイルの再チェックを強制し、Webサーバーを再起動するか、キャッシュを手動でクリアする必要があることを意味します。 FastCGI Webサーバーの設定では、再起動時にキャッシュがクリアされないことがあります。スクリプトファイルがほとんど変更されないプロダクションサーバーでは、無効な統計情報によって大幅なパフォーマンスの向上が実現できます。

このオプションは同様に適用されますが、相対パスインクルード(Unixで始まらないパス)では、ファイルを一意に識別するためにチェックする必要があります。絶対パスを使用する場合は、APCはstatをスキップしてその絶対パスをファイルの一意の識別子として使用できます。

PHPのための親指の良いルールはそうのようなプロジェクトへの完全なパスが含まれている定数を定義することです:

include_once PATH_PROJECT . '/some/dir/file.php'; 

// Assumes __FILE__ is in the root of your project 
define('PATH_PROJECT', realpath(dirname(__FILE__))); 

は、あなたのはそうのような含みを使用したがって、あなたはまだ相対パスの利便性を持っていますが、本当に完全なパスを使用しています。

関連する問題