防止高交换:高stream量站点的服务器的Apacheconfiguration

我拥有一个服务器,托pipe一个高stream量网站,在给定的时间为800 – 1400用户服务。 这些用户通常停留超过5分钟(考虑到用户通常下载大型文件的网站的性质)。

我注意到,服务器每48小时用完一次SWAP,但是我的服务器只使用了5-11%的内存。 我想咨询一下我应该怎样修改Apacheconfiguration来防止它的发生。

我的apacheconfiguration如下:

keepalive: Off keepalivetimeout: 5 maxclients: 2500 maxkeepaliverequests: 200 maxrequestsperchild: 10000 maxspareservers: 10 minspareservers: 5 serverlimit: 2600 serversignature: Off servertokens: Full startservers: 5 timeout: 300 

服务器规格:

 Intel XEON E5-1620v2 64 GB DDR3 ECC 1600MHz 2x2000GB 

  1. 完全切断使用它可能会让事情变得更糟。

  2. 切断maxrequestsperchildmaxclients 。 从零开始,看看结果如何。 从那里你可能会想要砍他们几次。

  3. 实施一个凶手。

在考虑硬件升级之前,尝试优化操作。

否则,我通常会build议你启用oom杀手,因为它会杀死任何接近消耗所有服务器内存的进程。 当然,你将需要更新的方式来重新启动Apache(例如daemontools)。

但在此之前,我想你可以考虑为apache设置MaxClients指令。 这限制了apache一次服务的请求数量,并排队其他请求。 prefork,这限制了subprocess的数量。 对于worker而言,它限制了可用于请求的线程数量。

“Maxclients $ number”是语法,您可以尝试使用MaxClients编号来查看您可以设置多高,而不消耗太多的服务器资源。

当然,这个build议是基于你已经指出apache是​​你内存问题的原因的。