![防止高交换:高流量站点服务器的 apache 配置](https://linux22.com/image/647403/%E9%98%B2%E6%AD%A2%E9%AB%98%E4%BA%A4%E6%8D%A2%EF%BC%9A%E9%AB%98%E6%B5%81%E9%87%8F%E7%AB%99%E7%82%B9%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%20apache%20%E9%85%8D%E7%BD%AE.png)
我拥有一台服务器,它托管着一个高流量网站,同时为 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
完全切断交换,因为使用它可能会使情况变得更糟。
剪
maxrequestsperchild
下来maxclients
。先把末尾的零剪掉,然后看看效果如何。然后,你可能想把它们剪成两半几次。实施 oom killer。
答案2
在考虑硬件升级之前,尝试优化操作。
否则,我一般会建议您启用 oom killer,因为它会杀死任何接近消耗所有服务器内存的进程。当然,您需要一种更新的方式来重新启动 apache(例如 daemontools)。
但在此之前,我想您可以研究一下为 apache 设置 MaxClients 指令。这限制了 apache 一次处理的请求数量,并将其他请求排队。对于 prefork,这限制了子进程的数量。对于 worker,它限制了可用于处理请求的线程数量。
“Maxclients $number” 是语法,您可以试验 MaxClients 数字,看看可以将其设置多高而不会消耗太多服务器资源。
当然,这个建议是基于您已经确定 apache 是导致内存问题的原因的假设。