我有一个奇怪的,我昨天才注意到的。 在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。