当Apache到达MaxClients时,用户会看到什么?


8

有时,在我的Apache错误日志中,我会发现:

[error] server reached MaxClients setting, consider raising the MaxClients setting

由于内存不足的问题,我过去曾有意将MaxClients降低到60,但是我想确切地知道当服务器上达到此限制时用户端发生了什么。他们正在访问的页面加载时间是否更长?他们收到某种错误消息吗?


1
为此可能很难进行测试。在测试服务器中,尝试将MaxClients降至1,然后查看在多个窗口或选项卡中刷新内容时会发生什么。
ghoti 2015年

绝对-我希望有人在我之前会知道。我在Apache文档中找不到任何信息。
runningonplants 2015年

Answers:


13

首先,客户端请求将排队,直到apache服务器上有可用的进程/线程。因此,客户端将看到加载页面的延迟。有关更多信息,请参见MaxClients参数文档

当放置在积压队列中时,客户端请求最终可能在客户端超时。然后,用户将在其浏览器中看到一个错误页面,告知服务器花费了很长时间才能给出答案。例如,在Firefox中,默认超时值为300秒。否则用户将在超时之前取消请求...

然后,如果服务器收到更多请求,并且无法及时获得空闲的进程/线程,则ListenBacklog队列将被填满(默认为511个排队的请求),并且任何后续请求都将不会得到处理。然后,浏览器将告知用户它无法连接到网站,就像网站完全关闭一样。

在TCP实施中,此积压队列在OS级别进行管理。在linux下,listen手册页将为您提供有关其管理方式的更多信息。这是关于Linux和BSD系统中的TCP积压队列的另一篇非常有见地的读物


正是我需要知道的。谢谢!您是否偶然知道是否有办法查看ListenBacklog队列中有多少个进程?
runningonplants 2015年

1
此积压队列由操作系统管理,作为tcp堆栈的一部分。看看listen手册页。我不确定是否有直接方法了解此队列包含的内容。另外,请参阅此SO问题。我已在答案中添加了更多信息。
Tonin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.