有时候,太多的http请求,因此太多的httpd进程“堆积”,意味着第一个请求的响应时间太长,那么后面的队列就会排队等待响应,因此需要更多请求以指数forms堆积,直到整个服务器崩溃。
我已经尝试将MaxClients限制在服务器可以处理的数量之内,而不会崩溃。 然而,虽然这确实阻止了Apache产生更多的进程,但似乎并没有避免更多的请求堆积起来。
也就是说,如果MaxClients限制为100,那么101st和以下的请求不会出现错误,但由于某些原因,出现某种原因,它们会排队等待,直到Apache能够产生更多的进程来处理它们。 所以,这只能防止整个操作系统与Apache的下降,但这并不能避免Web服务器的饱和。
我可以这样做,即N = MaxClients,发现服务器太忙的第N + 1个请求立即收到一个错误响应,或立即拒绝连接(在任何级别)?
这是在Debian上,Apache正在使用prefork。
顺便说一句,为了说明为什么我假设上述方法可能是有道理的,我已经证实,当这种雪崩效应发生时,如果我重新启动apache服务器(这需要几分之一秒),服务器立即返回即使它仍然处于相同的负载之下,然后平稳地工作,通常很长一段时间,直到发生新的“雪崩”。 相反,如果我什么都不做,服务器将永远不会恢复。