防止高交换:高流量站点服务器的 apache 配置

防止高交换:高流量站点服务器的 apache 配置

我拥有一台服务器,它托管着一个高流量网站,同时为 800 - 1400 名用户提供服务。这些用户通常会停留超过 5 分钟(考虑到该网站的性质,用户通常会下载大文件)。

我注意到服务器每 48 小时就会用完一次 SWAP,但我的服务器只使用了 5-11% 的内存。我想寻求建议,我应该对 Apache 配置进行哪些更改以防止这种情况发生。

我的apache配置如下:

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

  1. 完全切断交换,因为使用它可能会使情况变得更糟。

  2. maxrequestsperchild下来maxclients。先把末尾的零剪掉,然后看看效果如何。然后,你可能想把它们剪成两半几次。

  3. 实施 oom killer。

答案2

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

否则,我一般会建议您启用 oom killer,因为它会杀死任何接近消耗所有服务器内存的进程。当然,您需要一种更新的方式来重新启动 apache(例如 daemontools)。

但在此之前,我想您可以研究一下为 apache 设置 MaxClients 指令。这限制了 apache 一次处理的请求数量,并将其他请求排队。对于 prefork,这限制了子进程的数量。对于 worker,它限制了可用于处理请求的线程数量。

“Maxclients $number” 是语法,您可以试验 MaxClients 数字,看看可以将其设置多高而不会消耗太多服务器资源。

当然,这个建议是基于您已经确定 apache 是导致内存问题的原因的假设。

相关内容