Opcache の実行中に Capistrano を介して新しい PHP コードをデプロイしようとしています。
Capistrano は、デプロイするたびに新しいデプロイ ディレクトリを作成し、Web サーバーが新しいディレクトリを指すようにシンボリック リンクを調整します。Opcache はファイルの実際のパスによってキャッシュされるため、サイトの新しくデプロイされたバージョンは古いバージョンとは完全に別個にキャッシュされることを意味します。
私たちが直面している問題は、Opcache がメモリを使い果たすことです。これは、新しいデプロイのたびに完全なコード ベースがキャッシュされ、古いコードが削除されないためです。を呼び出すこともできますopcache_reset()
が、キャッシュがリセットされると、キャッシュが暴走するときに 500 エラーが一時的に発生します。(キャッシュをウォームアップせずに新しいデプロイを開始しようとすると、同じエラーが発生します。)
これを処理するより良い方法はありますか?opcache_reset()
ライブサイトでの呼び出しを回避できるように、メモリがなくなるまで (またはファイルが多すぎるために空になるまで) opcache をいっぱいにせずに新しいコードを起動する方法はありますか? PHP-FPMがPHPリクエストを処理するWebサーバーとしてNginxを使用しています(またはとにかく移行しようとしています)。