有时,太多的 http 请求会“堆积”起来,从而导致太多的 httpd 进程,“堆积”起来的意思是,第一个请求需要很长时间才能响应,然后后面的请求会排队,需要很长时间才能响应所有请求,因此更多的请求会呈指数级堆积起来,直到整个服务器崩溃。
我已经尝试将 MaxClients 限制为服务器可以处理的不崩溃的数量。然而,虽然这确实可以防止 Apache 产生更多进程,但似乎无法避免更多请求堆积。
也就是说,如果 MaxClients 限制为 100,第 101 个及后续请求不会出错,但由于某种原因,它们会排队等待,直到 Apache 能够生成更多进程来处理它们。因此,这只能防止整个操作系统因 Apache 而崩溃,但无法避免 Web 服务器的饱和。
我该怎么做,以便当 N=MaxClients 时,第 N+1 个请求发现服务器太忙,立即收到错误响应,或者立即被拒绝连接(无论在哪个级别)?
这是在 Debian 上,并且 Apache 正在使用 prefork。
顺便说一句,为了说明为什么我认为上述方法有意义,我已经验证过,当这种雪崩效应发生时,如果我重新启动 Apache 服务器(这需要几分之一秒),服务器会立即恢复正常,即使它仍处于相同的负载下,之后它会顺利运行,通常会持续很长时间,直到发生新的“雪崩”。相反,如果我什么都不做,服务器将永远无法恢复。