我们正在尝试在运行 Opcache 时通过 Capistrano 部署新的 PHP 代码。
Capistrano 每次部署时都会创建一个新的部署目录,然后调整符号链接,以便网络服务器指向新目录。因为 Opcache 通过文件的真实路径进行缓存,这意味着新部署的站点版本与旧版本完全分开缓存。
我们遇到的问题是 Opcache 耗尽了内存,因为每次新部署都会导致整个代码库被缓存,而旧代码永远不会被驱逐。我们可以调用opcache_reset()
,但是当缓存被重置时,当缓存踩踏时我们会短暂地得到 500 错误。(如果我们尝试在不预热缓存的情况下启动新部署,也会出现同样的错误。)
有没有更好的方法来处理这个?有什么方法可以启动新代码而不填满 opcache,直到它耗尽内存(或者因为它有太多文件而清空自己),这样我们就可以避免调用opcache_reset()
实时站点?我们正在使用(或尝试过渡到)Nginx 作为我们的 Web 服务器,使用 PHP-FPM 处理 PHP 请求。