我有一台 Apache 服务器,它通过 NFS(从单独的专用 NFS 文件服务器)访问源代码。Apache 服务器会定期停止接受新请求(实际上会关闭服务器),当我查看它时,它会填满 MaxClients。经过进一步研究,该站点并没有那么繁忙……堆栈填满的原因是每个 Apache 进程都处于“发送回复”状态(所有 W 都通过 mod_status)。此外,在 top 中,每个 apache 进程都处于“lockf”状态,这让我认为这是一个 NFS 问题。我在网上找不到太多相关信息,这个周末我一直在绞尽脑汁试图找出原因。有人知道可能发生了什么,或者我如何进一步诊断问题吗?
非常感谢!
答案1
James Yale 是正确的。您目前正遭受可怕的“永久布什综合症”的折磨(没有人喜欢永远被困在“W”中)。简而言之,您必须追踪哪个脚本“卡在 W”中,并找出传递给脚本的哪些变量导致锁定。这里有一篇非常好的文章,应该会有所帮助:解决 Httpd MaxClients 和 mod 状态“卡在 W”的问题
答案2
我们刚刚遇到了类似症状的问题,服务器达到 MaxClients 后,apache 进程的数量不会下降,新客户端无法连接。
看来该问题是由我们的 Web 应用程序与 Apache 上的 MaxClients 设置之间的交互导致的死锁引起的。ServerFault 上的另一个问题为我指明了正确的方向:Apache 达到 MaxClients 并锁定服务器
编辑:顺便说一句,由于我们目前无法修复我们的应用程序,我们不得不添加更多的网络服务器并取消 MaxClients 设置的限制。
答案3
如果您的日志被写入您的 nfs 服务器,请确保您指定 Lockfile 指令位于本地磁盘上。