gpt4 book ai didi

capistrano - 运行 Opcache 时部署新的 PHP 代码

转载 作者:行者123 更新时间:2023-12-04 18:05:21 25 4
gpt4 key购买 nike

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

每次部署时,Capistrano 都会创建一个新的部署目录,然后调整一个符号链接(symbolic link),以便网络服务器指向新目录。因为 Opcache 通过文件的真实路径进行缓存,这意味着站点的新部署版本与旧版本完全分开缓存。

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

有没有更好的方法来处理这个问题?有什么方法可以启动新代码而不填满 opcache 直到它用完内存(或者因为它有太多文件而自行清空),这样我们就可以避免在实时站点上调用 opcache_reset() ?我们正在使用(或尝试过渡到)Nginx 作为我们的 Web 服务器,使用 PHP-FPM 处理 PHP 请求。

最佳答案

一个选项是调用 opcache_invalidate对于部署结束时站点旧版本中的每个文件。您可以通过在失效后包含文件来防止缓存踩踏。

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

另一种选择是删除脚本的旧版本,以便 opcache 在 revalidate_freq 过后将它们从缓存中清除,强制它从文件系统加载新文件。

关于capistrano - 运行 Opcache 时部署新的 PHP 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27914607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com