Мы пытаемся развернуть новый PHP-код через Capistrano во время работы Opcache.
Capistrano создает новый каталог развертывания каждый раз при развертывании, а затем настраивает символическую ссылку, чтобы веб-сервер указывал на новый каталог. Поскольку Opcache кэширует реальный путь к файлу, это означает, что вновь развернутая версия сайта кэшируется полностью отдельно от старой.
Проблема, с которой мы сталкиваемся, заключается в том, что Opcache исчерпывает память, потому что каждое новое развертывание приводит к кэшированию всей базы кода, а старый код никогда не удаляется. Мы могли бы вызвать opcache_reset()
, но при сбросе кеша мы ненадолго получим 500 ошибок, когда кеши в панике. (У нас также были бы те же ошибки, если бы мы попытались запустить новое развертывание без прогрева кеша.)
Есть ли лучший способ справиться с этим? Какой-то способ запустить новый код, не заполняя opcache до тех пор, пока он не исчерпает память (или не очистит себя из-за слишком большого количества файлов), что позволит нам избежать вызова opcache_reset()
на действующем сайте? Мы используем (или в любом случае пытаемся перейти на него) Nginx в качестве нашего веб-сервера с PHP-FPM, обрабатывающим PHP-запросы.