5

最近、サーバーでAPCを有効にしました。新しいコードまたは変更を公開すると、変更されたソース ファイルがコードに反映されていないエラーをスローし始めることがわかります。存在。php -lエラーログに影響があると書かれているファイルを実行することで、これを確認しました。通常、再公開すると問題が解決します。PHP 5.2.0 と APC 3.01.9 を使用しています。私の質問は、他の誰かがこの問題を経験したことがありますか、または誰かが私たちの問題が何であるかを認識していますか? その場合、どのように修正しましたか、またはどのように修正できますか?

編集: おそらく、公開プロセスに関する詳細を追加する必要があります。コンテンツは、ステージング サーバーから rsync を介して運用サーバーにプッシュされています。apc.stat_ctimeこれにより、rsync をよりスムーズに実行できるとのことでしたので、 有効にしました。apc.write_lockはデフォルトでオンになっており、無効にはしていません。についても同様ですapc.file_update_protection

4

6 に答える 6

7

部分的に公開されたファイルが読み取られ、壊れたものとしてキャッシュされているようです。apc.file_update_protectionは、これを防ぐために設計されています。

php.ini で:apc.file_update_protection integer

apc.file_update_protection設定により、新しいファイルのキャッシュに遅延が生じます。デフォルトは 2 秒です。これは、ファイルの変更タイムスタンプ (mtime) が、アクセスされた時点で 2 秒未満であることを示している場合、そのファイルはキャッシュされないことを意味します。この書きかけのファイルにアクセスした不運な人は、依然として奇妙に感じるでしょうが、少なくとも持続することはありません。

編集中の質問に続いて:この種の問題が見られない理由の1つは、サイトのまったく新しいコピーを(SVNエクスポートで)プッシュすることです。それが完全に完了して初めて、Apache/Mod_php から見えるようになります (私の回答How to get started deploying PHP applications from a subversion repository? を参照してください) 。

もちろん、その場で更新している場合、まだアップロードされていない他のファイルに依存するファイルを更新している可能性があります。Rsync は、変更/アップロードされているコレクション全体ではなく、個々のファイルのアトミック更新のみを保証できます。もう 1 つの理由は、サイトをまとめてアップロードしてから使用することです。

于 2009-05-04T15:26:43.200 に答える
4

APC が正しいファイル統計情報を実行または取得していないようです。これをチェックして、APC 構成apc.statが正しく設定されていることを確認できます。別の方法として、新しいコードを公開するときにapc_clear_cache()を使用してキャッシュを強制的にクリアすることができます。

于 2009-05-04T15:20:08.643 に答える
0

解析エラーのあるファイルを取得したら、それをバックアップしてから再公開します。現在機能している同じファイルを取得し、解析エラーのあるファイルに対して差分を実行します。

于 2009-05-04T14:57:11.227 に答える
0

ctime は作成時刻を意味します。更新を行うたびに、キャッシュ全体を手動でフラッシュする必要があります。

サーバーのどこかに apc.php スクリプトを配置することで、これを簡単に行うことができます。このスクリプトはキャッシュ統計を提供し、キャッシュを完全に削除できるようにします。

スクリプトは APC に付属しています。

彼の助けを願って、エバート

于 2009-05-04T16:44:41.420 に答える
0

私が APC の巨大なユーザーであっても、これまでに見たことはありません。サーバー上で新しいコードを送信するたびに、APC オペコードを空にするスクリプトをトリガーしてみませんか?

于 2009-05-04T14:47:46.350 に答える
0

これは、コードとキャッシュされたバージョンのコードとの間に不一致があるために発生している可能性があります。

たとえば、APC には User.php のキャッシュ バージョンがありますが、User.php または User が使用するデータに変更を加えたとします。キャッシュされたバージョンは、まだ有効期限が切れていないため、展開後も実行されています。

デプロイ時に APC キャッシュ エントリをクリアすると、この問題は解消されます。

于 2009-05-26T14:56:28.010 に答える