我目前正在使用 LAMP 架构,预计会出现大问题 :(
我有几个使用 PHP5 的 http web 服务器。所有服务器都通过 NFS (v3) 安装所有托管网站的目录。文件服务器正在使用 ZFS 运行 Nexenta Storage Appliance。
问题是所有尝试通过 NFS 在文件中写入内容的 NFS 客户端都会遇到此问题:
这是 apache2 进程内部:
open("/nfs/website1/file.txt", ORDWR|OCREAT, 0600) = 11647 fstat(11647, {stmode=SIFREG|0600, st_size=23754, ...}) = 0 flock(11647, LOCK_EX
并且该过程永远无法获得锁并一直在等待......永远。
效果如何?所有 apache2 进程都已使用并处于等待状态。我的服务器无法处理其他请求,因为没有更多可用的进程。
我现在不知道在哪里可以找到解决方案。对我来说,解决方案在 NFS 服务器端。但是哪个配置是错误的或缺失的?我如何才能找到错误?如果您需要有关配置的更多信息,只需问我,我就能为您提供更多帮助 :)
答案1
听起来好像锁守护进程没有在服务器端运行。
您可以通过更改 NFS 安装(在客户端)以使用 nolock 选项来测试这一点。使用此选项不会阻止客户端计算机内的锁定(使用本地锁定),但它会阻止计算机之间的锁定工作,因此这可能不是您的有效解决方案。不过,您可以尝试将其作为测试,看看它是否能防止您的 Web 服务器进程锁定。
一旦您确定锁守护进程是否是问题所在,那么您就可以研究为什么它没有在服务器端运行(或者是否有某种类型的防火墙阻止锁协议在客户端和服务器之间运行)。