首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行Opcache时部署新的PHP代码

在运行Opcache时部署新的PHP代码
EN

Stack Overflow用户
提问于 2015-01-13 11:52:21
回答 1查看 1.7K关注 0票数 3

我们试图在运行Opcache的同时通过Capistrano部署新的PHP代码。

Capistrano会在您每次部署时创建一个新的部署目录,然后调整符号链接,以便new服务器指向新目录。因为Opcache按文件的实际路径进行缓存,这意味着新部署的站点版本与旧版本完全分开缓存。

我们遇到的问题是Opcache耗尽了内存,因为每次新部署都会导致整个代码库被缓存,而旧代码永远不会被逐出。我们可以调用opcache_reset(),但是当缓存被重置时,当缓存蜂拥而出时,我们会短暂地得到500个错误。(如果我们试图在不预热缓存的情况下启动新的部署,我们也会遇到相同的错误。)

有没有更好的方法来处理这件事?有没有办法在启动新代码的同时不填满opcache,直到它耗尽内存(或者因为它有太多的文件而清空了自己),这样我们就可以避免在实时站点上调用opcache_reset()?我们正在使用(或尝试转换到) Nginx作为我们的web服务器,由PHP-FPM处理PHP请求。

EN

回答 1

Stack Overflow用户

发布于 2015-01-13 12:23:22

一种选择是在部署结束时为站点的旧版本中的每个文件调用opcache_invalidate。您可以通过在失效后包含文件来防止缓存崩溃。

第二种选择是将fpm设置为具有多个池,并逐个重新启动它们(它们将从一个干净的opcache开始)。您将在一定程度上防止缓存崩溃在任何给定时间只有一台服务器具有干净的缓存,并且应用程序将保持运行,因为nginx将能够平衡不同池上的负载。

另一种选择是删除脚本的旧版本,这样一旦revalidate_freq通过,opcache就会从缓存中清除它们,强制它从文件系统加载新文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27914607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档