Apache MaxClients 问题

Apache MaxClients 问题

在我的错误日志中我看到:

server reached MaxClients setting, consider raising the MaxClients setting

我的 MaxClients 设置是 150。然而,当我计算出最佳的 MaxClients 设置时,我得出了以下结论:

Mem used by 1 Apache process = 16
Mem available to Apache = 197

MaxClients = 12 (197/16)

那么我是否应该将 MaxClients 降低到 12,因为我的计算表明这是我可用的所有 RAM,或者我是否应该按照错误日志的建议提高限制(或者我的计算毫无价值,因为我误解了一些东西)?

答案1

如果您正在运行预分叉 Apache,请考虑在 httpd.conf 中将 KeepAlive Off 设置为 Off。Apache 将在完成每个连接后关闭每个连接,而不是每个子进程都持有一个非活动连接。这将减少需要提供服务的总体连接数和子进程数。这确实会增加一点额外的时间,因为每个新请求都必须与您的服务器重新协商,而不是重新使用打开的连接。

(编辑)哦,是的,这个问题。我会保留 MaxClients 不变,或者根据您拥有的 RAM 进行设置。假设您拥有足够多的 RAM,经验法则是假设您的后端速度不是太慢,则使用 2-4 倍于您拥有的 CPU 核心数,否则使用 RAM 作为限制因素。但是我认为关闭 KeepAlive 会将您需要的子进程数降低到相当正常的水平,并且您将不会达到限制。

(edit2) 现在这里变得棘手了。如果您的 Apache 服务器是一个应用服务器,主要运行 PHP、Ruby 等代码,并将从各种后端或磁盘获取的数据处理到呈现的页面中,那么 2-4x 规则就起作用了。通常,如果未缓存的页面很多,则每页浏览将消耗 250 毫秒的 CPU,或者每个核心 4 页浏览。如果您有一台独立服务器,您将能够处理更多请求,因为其中很多将是小图像、css、js 等,这些通常由另一组服务器为应用服务器提供服务。我假设您有一台服务器,所以最好不要管它。

在我上一份工作中,我们运行了 8 核/8GB 前端机器,MaxClients 为 50,KeepAlive Off,效果很好。在某些情况下,将 MaxClients 设置为 100 可以获得稍好的基准,但页面生成的整体延迟会增加,因为大多数时候我们都在各种后端上阻塞或开始缺少 CPU。

答案2

我不会进行那种计算,而是会进行实验,看看你的服务器真正能够处理什么。那种计算或多或少是一个指导方针,但要确定你的服务器,你只需对其进行压力测试,看看是否可行。

相关内容