我正在尝试调整 Apache 中的参数以适应高流量网站。我的规格是
Ram : 12 GB RAM
CPU : 16 core
当前参数
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MinSpareServers 5
MaxSpareServers 10
ServerLimit 2500
MaxClients 2500
MaxRequestsPerChild 10000
KeepAlive Off
KeepAliveTimeout 5
MaxKeepAliveRequests 100
根据我的服务器规格,这些参数的建议值是多少?
答案1
有一个很棒的教程在这个网站上如何“计算”设置。(如果网站离线,下面还有教程)
在自定义指令之前,您需要了解指令的工作原理。让我用通俗易懂的语言解释一下。服务器将启动 2 个子进程,这由 StartServers 指令决定。每个进程将启动 20 个线程,这由 ThreadsPerChild 指令决定,因此这意味着 2 个进程只能服务 40 个并发连接/客户端(即 20×2=40)。那么如果有更多请求进来怎么办。
现在如果有更多的并发用户,那么就会启动另一个子进程,可以为另外 20 个用户提供服务。但是可以启动多少个子进程是由 ServerLimit 参数控制的,这意味着在上面的配置中,我总共可以有 10 个子进程,每个子进程可以处理 20 个线程,总共可以处理 10×20=200 个并发用户。
但有一个问题,这里 MaxClients 中定义的数字是 100,这意味着在 5 个子进程之后,不会启动任何额外的进程,因为我们已经定义了 MaxClients 的上限。这也意味着,如果我将 MaxClients 设置为 500,在 10 个子进程和 200 个连接之后,不会启动任何额外的进程,即使我们增加了 MaxClient 参数,我们也无法为超过 200 个并发客户端提供服务。在这种情况下,我们还需要将 ServerLimit 增加到 500/20,即 MaxClients/ThreadsPerChild=25
好的,现在您已经了解了指令及其工作原理,问题是如何计算指令。让我们开始计算指令值。
您可以使用此 shell 脚本确定一个 Apache 进程所消耗的平均内存量。此外,它还会显示所有 Apache 进程所消耗的总内存量。只需解压并使用 sh 命令执行即可。当服务器负载过重时,将显示准确的结果。
输出
Apache 内存使用量(MB):57.586 平均进程大小(MB):10.2
Apache Memory Usage (MB): 57.586 Average Proccess Size (MB): 10.2
假设平均而言,一个 Apache 进程消耗 50MB RAM,服务器的 RAM 为 2048MB,并且您想为其余进程留下 512MB,那么:
MaxClients = (2048MB – 512MB)/10MB = 153.6 ~ 153