Apache 进程挂起并达到 MaxClients

Apache 进程挂起并达到 MaxClients

我运行一个流量相当大(专用 Apache/PHP)的 Web 服务器,虽然它大部分时间都运行良好,但每天大约会死锁一次并拒绝任何新连接。重新启动 Apache 即可修复此问题。在这次锁定之前,我曾几次发现此问题,Apache Status 会显示每个请求都为 W(发送回复)。http-errors.log 中的最后一个错误是 MaxClients 已达到(这是有道理的,因为没有请求返回)。

你们知道为什么 Apache 请求可能决定永不返回吗,或者对这里可能发生的事情有什么想法吗?

谢谢!

答案1

看来您得了可怕的持续布什综合症(简称 PBS)……这意味着您被太多的 W(发送回复)困住了。幸运的是,有一个非常简单的解决方法。原因可能是您的脚本正在执行一个永远无法完成的冗长的查询。请查看这篇文章,它解释了如何修复诊断并追踪连接卡在“发送回复”状态的原因http://techmythsworld.blogspot.com/2011/11/solving-httpd-maxclients-and-modstatus.html

简而言之,您需要执行以下操作:1. 找到在 W 中卡住的脚本以及发布到该脚本的任何内容(可能是导致其卡住的非常独特的变量)。

  1. 确保您可以通过将导致问题的变量发布到脚本来重现这种情况。您将看到从您的 ipaddress 出现一个连接,该连接将停留在 W 中。

  2. 追踪是否存在循环或未结束的数据库查询。

  3. 修复脚本。然后重新发布变量,您应该会看到您的 ipaddress 卡在 W 中的情况已经消失。

PS. 每次测试时都必须重启 Web 服务器以重置连接(命令“service httpd restart”应该可以)

答案2

当 PHP-FPM 无法运行时,我也遇到了这个问题。网站瘫痪,进程保持“W”状态。重新启动 PHP-FPM 解决了这个问题。

相关内容