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