MaxClients在Web应用程序服务器上不断超越

我正在CentOS 6机器上运行一个具有4个内存和3个处理器内核(Intel Xeon 2.9 Ghz)的Web应用程序。

每天早晨8点30分至9点30分(与大多数人进入工作并开始使用此应用程序的时间段一致),Apache会停止采取任何新请求,因为MaxClients设置跨越了256(这是默认设置)。

在任何时候,我有15个用户在使用这个应用程序,并且这个应用程序的活动时间在上午8点30分到下午4点30分之间。

为了试图了解可能会导致MaxClients设置超出的原因,我开始监视在加载页面期间和之后,我的计算机向服务器发送了多less个请求。 大约40分钟的监测结果是:

在这里输入图像说明

可以看出,我的web应用程序使用CometChat来允许用户互相交互,并且在页面加载之后,所有的活动都来自CometChat,使得AJAX请求得到更新。

就在现在,我在shell中运行这个命令来获得正在运行的apache线程的数量:

pidof httpd | wc -w

结果是:245.重启Apache后,这个数字一直在上升。 这些进程所占用的平均(居民)内存大约是18M

每个进程有18M的245个进程会导致超过4个RAM的使用。

现在,对于我的问题:

  • 我的客户(或CometChat是否代表我的客户)提出太多要求? 数据传输量是否exception高?
  • 我该如何防止MaxClients设置被超过?

这对我们来说是一个很低的交通时间。 在接下来的几个月里,stream量只会增加。 任何帮助表示赞赏!

很多时候,httpd进程仍然存在,但不提供客户端请求。

您是否尝试增加MaxClients和ServerLimit的数量,同时减lessMaxRequestsPerChild?

如果由于内存原因无法增加MaxClients,则尝试将StartServers和MinSpareServer MaxSpareServer限制为最小值(大约5)。

减lessMaxRequestsPerChild的值将使得这个过程循环得更快,但是它不会允许同时接受更多的客户端,但是这将有助于避免在客户端保持连接的情况下拥塞(在TCP级别或者保持活跃)。

您也可以尝试强制closuresKeep-Alive,以确保每个请求被正确closures(然后再循环)

最后,如果你不能调整,而你有效地同时拥有256个客户端,那么你应该看看如何增加内存。