在大型集群中随着时间的推移Apache的CPU使用率增加

我有一个奇怪的,我昨天才注意到的。 在24小时内,我们的apache机器上的cpu负载(16个双核六核机器)增加了一倍。 我们每个月处理大约80亿个请求,一切都落后于haproxy负载平衡器。 每台机器上正在运行的进程数总是相同的(在负载平衡器上限制),并且任何队列都在haproxy中构build。 我们将haproxy中的运行会话数量限制为每台机器90个(因为每台机器上的ram和cpu限制而被选中)

我们正在使用以下configuration的事件mpm:

event MPM <IfModule event.c> ServerLimit 15 MaxClients 960 StartServers 2 ThreadsPerChild 64 ThreadLimit 64 MinSpareThreads 32 MaxSpareThreads 112 MaxRequestsPerChild 20000 </IfModule> 

以目前的速度,20K的请求应该意味着线程每2分钟左右重启一次。

内存使用率低。 我们在每台机器上都有12GB的RAM,而在高峰期,它们只用了7GB。 apache的重新启动立即将负载降低一半,并保持几个小时。

任何想法或额外的信息需要?

我可以build议你的是,你放弃90客户haproxy限制。

由于你的内存大概是12G的7G,你可以做更多的客户端。

我的build议如下:

如果您的应用程序可以处理mpm_worker,那么使用worker比使用prefork更好。

看来你的服务器一直都很忙,所以请使用高启动服务器,因为Apache只会在创build这些进程后才开始服务,所以这会让你的天平只开始向一台服务器发送请求,有很多进程到服务器(这将导致我慢启动Apache服务器)

我可以尝试多说,如果我有更多的信息.​​..我的意思是,也许你更喜欢有6台机器12GB的RAM ..当你可以运行在4台机器正确的configuration!

我不明白为什么减lessMaxRequestPerChild将在CPU上做得更好,如果你的应用程序不正常,它只会做得更好。 你必须使用更多的CPU周期来杀死一个进程并开始一个新的进程。 我的意思是,如果将MaxRequestPerChild减半,就必须创build两倍于以前的进程。

CPU高做意味着坏事…也许可以做很多工作

你运行什么样的应用程序? 至于apache模块…它认为你的应用程序比apache本身使用更多的RAM。