为什么尽管配置看似正确,Apache 仍从 NFS 提供过时的文件?

为什么尽管配置看似正确,Apache 仍从 NFS 提供过时的文件?

我有两台 CentOS 机器(虚拟化),安装了 NFS 共享,其中的内容如下/etc/fstab

<ipaddr>:/mnt/nfsshare   /mnt/nfsshare              nfs rsize=1024,wsize=1024,timeo=14,intr,cto,relatime 0 0

我已经在每个 Apache 的配置中EnableMMAP OffEnableSendfile Off安装了。连接到 NFS 的另一台服务器偶尔会复制带有更新版本的 CSS 文件(例如,当有人从暂存中应用更改时)。从 shell 来看,此更新似乎已完成(即更新的时间戳并cat显示正确的数据)。

但是,从浏览器或其他工具加载文件时显示的是过时的版本。有时,我甚至会看到不同的响应(两个 Apache 服务器是负载平衡的)。一段时间后,更改似乎会完成,Apache 将返回正确的文件内容,但通常需要一两分钟。

答案1

您可以尝试用“noac”替换“cot”并完全禁用缓存,但是如果您的生产实例是唯一出现此缓存的地方,则可能会受到一些性能损失。另一个选项是设置 acregmax=10,这将使属性缓存时间不超过 10 秒——默认情况下,所有属性缓存 60 秒,虽然“cto”表示应在 open() 和 close() 上检查属性,但单个 apache 进程可能仍挂在文件句柄或其他东西上。

相关内容