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

偶尔在我的Apache错误日志中,我会发现:

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

由于内存不足的问题,我特意降低了MaxClients(到60),但是我想知道在服务器上达到这个限制时,用户端发生了什么。 他们访问的页面是否需要更长时间才能加载? 他们是否得到某种错误信息?

首先,客户端请求将被排队,直到在apache服务器上有一个进程/线程被释放。 所以,客户端会看到加载页面的延迟。 有关更多信息,请参阅MaxClients参数文档 。

当放置在积压队列中时,客户端请求最终可能在客户端超时。 然后,用户会在浏览器中看到一个错误页面,告诉服务器需要很长时间才能给出答案。 例如,Firefox中的默认超时值是300秒 。 或者用户将在超时之前取消请求…

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

这个积压队列是在操作系统级别的TCP实现中进行pipe理的。 在linux下, listen手册页会给你更多关于pipe理方式的信息。 这里是另一个非常有洞察力的阅读关于Linux和BSD系统中的TCP积压队列 。