3

APCが古いエントリをクリアする方法でロジックを見つけるのに苦労しています。特にユーザーエントリの場合、断片化が予想外のレベルまで急速に増加していることに気付きます。

apc.ttlとapc.user_ttlは3600に設定されていますが、APCキャッシュ内の多くの古いエントリがクリアされていないことに気付きました。APCのメモリのサイズを繰り返し増やしましたが、100%の断片化に達するまで、メモリのサイズが少し長くなるだけです。

では、なぜこれが起こっているのでしょうか?実際、これはAPCのバグだと思いますが、これは通常の動作ではありません。いくつかのAPCプロセスが時々古いエントリをクリアすることを期待します。

また、PHPには別のキャッシングシステムを使用し、APCのみをオペコードキャッシュとして使用する方がよいという結論につながる可能性があります(クリーニングの欠如がそれほど問題にならない場合)。

4

1 に答える 1

1

古い値を確実に削除したい場合。明示的に削除する必要があります。

アプリケーションで APC と memcached を組み合わせて使用​​しています。APC はオペコード キャッシングを提供するだけでなく、変更されない可能性が高いローカル データをキャッシュします (構成ファイルなど)。他のすべてのオブジェクトは、何らかのリードスルー ロジックを使用して memcached にキャッシュされます。(データが変更されるとクリアされます)

新しいリリースを行うときは、APC を再起動します (別のプロセスの場合は apache または php を使用)。これにより、APC キャッシュがクリアされ、設定ファイルがその後すぐにリロードされます。オブジェクトが大幅に変更され、古いキャッシュ データをロードする際に問題が発生した場合は、memcached を再起動します。

于 2012-12-16T22:12:51.360 に答える