Apache 未达到 max_client 值,无法处理新请求。有许多空闲子进程

Apache 未达到 max_client 值,无法处理新请求。有许多空闲子进程

我们面临一个问题,即使 apache 尚未达到其 max_client 设置,也不会处理新的请求。

Max_client 设置为 800
max_spare 服务器为 36
min_spare 服务器为 35
超时 300
keepalive 开启
keepalive 超时 10

最大保持活动请求数 100

为什么 apache 不处理新请求并发送超时,即使它还没有达到其 max_client 值。

strace 显示大约有 80 多个 apache 子进程处于空闲状态,即 strace 输出中的 0.0000 秒。

为什么这么多子代处于空闲状态并且仍在生成新的子代,但仍然不处理请求并发送超时。

我们正在使用 Php5、带有 mpm-prefork 的 Apache 2、Mysql 5,在带有 CSF 防火墙的 Ubuntu 11.04 上运行。

所有请求均来自单个 ip(我们的 ip 地址)。

来自单个 IP 的请求过多是否会导致任何 TCP/IP 或 Apache 连接限制,从而拒绝新的请求?

答案1

为什么这么多子代处于空闲状态并且仍在生成新的子代,但仍然不处理请求并发送超时。

“没人知道”

首先,您需要了解,在 prefork 中生成新进程的代价非常高。

为了尽可能避免这样做,请为服务器负载和预期的流量峰值配置正确的参数。

要找到答案,你可以看看服务器状态并检查这实际上是什么类型的负载 - 它是连接数、保持活动、每个 IP 并发性、带宽、后端代理延迟、空闲进程太少的瓶颈 - 什么?

如果您已启用服务器状态(和 ExtendedStatus!)并了解输出的含义,请回复我们。

答案2

您可能正在从测试平台通过同一连接发送多个请求。

基本上你设置了:

keepalive on
maxkeepaliverequests 100

因此在这种情况下,如果您通过同一个连接生成多个请求,那么在 100 个请求时就会遇到问题。

尝试:

keepalive off

或者

maxkeepaliverequests 0

注意:你的 ServerLimit 设置也应该至少与 MaxClients 匹配

相关内容