我拥有一台服务器,它托管着一个高流量网站,同时为 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 是导致内存问题的原因的假设。