NFS - PHP问题

3
我们遇到了一个奇怪的问题。我们使用NFS在只读模式下挂载了两台机器。每当我们上传一个包含文件时,PHP就会突然出现500错误。追踪代码执行时,发现错误是由于找不到包含文件引起的。但实际上,该文件在磁盘上存在且可读。当我们卸载并重新挂载它时,此错误得到解决。每当我们上传文件时,这个问题都会随机出现。我们无法得到任何线索。非常感谢您提供的任何意见。
提前致谢。

尝试使用NFS的noac挂载选项。 - Eugen Rieck
1个回答

4
这似乎可能是一个文件锁问题。NFS 可以在防止其他人访问时锁定正在执行/访问的文件。如果实现不当,它可能会导致死锁,结果是文件无用,直到访问它的应用程序被删除。
以下是有关文件锁定的更多信息:http://en.wikipedia.org/wiki/File_locking 建议检查您的 NFS 配置与文件锁定相关的设置,并根据您对其访问的需求进行调整。
如果只是只读数据,则不需要启用文件锁定,因为文件锁定的主要好处是防止两个人同时写入同一位置或当某人正在写入位置时,防止其他人读取过时或未完全完成的数据版本。在这种情况下,这不是必需的。
更新:要在 Linux NFS 上禁用文件锁定,请在挂载 NFS 点时,在为其分配的选项中添加 nolock。
例如,如果这是您的 /etc/fstab:
/dev/hda2   /   ext2    defaults    1 1
/dev/hdb1   /home   ext2    defaults    1 2
/dev/cdrom  /media/cdrom    auto    ro,noauto,user,exec 0 0
/dev/fd0    /media/floppy   auto    rw,noauto,user,sync 0 0
proc    /proc   proc    defaults    0 0
/dev/hda1   swap    swap    pri=42  0 0
nfssrv.server.com:/content  /opt/content  nfs  rw,bg,soft,actimeo=0,rsize=8192         0 0

您需要将其更改为:

/dev/hda2   /   ext2    defaults    1 1
/dev/hdb1   /home   ext2    defaults    1 2
/dev/cdrom  /media/cdrom    auto    ro,noauto,user,exec 0 0
/dev/fd0    /media/floppy   auto    rw,noauto,user,sync 0 0
proc    /proc   proc    defaults    0 0
/dev/hda1   swap    swap    pri=42  0 0
nfssrv.server.com:/content  /opt/content  nfs  rw,bg,soft,actimeo=0,rsize=8192,nolock         0 0

非常感谢您的回复。请建议如何检查NFS中是否启用了flock,以及如何禁用它。提前致谢。 - Saichithra Swaminathan
1
添加了一个简短的示例,说明你将要改变什么。 - Drahkar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接