如何在 Ubuntu 14.04 服务器上调整 Apache

Ser*_*ker 18 ubuntu performance-tuning mpm-prefork apache-2.4 ubuntu-14.04

目前在 Ubuntu 14.04 上的 Apache 2(确切地说是 Apache 2.4.7)上,我有以下设置:

/etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>
Run Code Online (Sandbox Code Playgroud)

该服务器是一个 8GB (RAM) 的亚马逊服务器,它只会为一些谷歌广告活动加载一个三页的注册表单。

我在网上找到了一个名为apachetuneit.sh的脚本,但是过了一会儿,Apache 报告了这个错误:

[Tue Apr 21 16:45:42.227935 2015] [mpm_prefork:error] [pid 1134] AH00161:服务器达到 MaxRequestWorkers 设置,考虑提高 MaxRequestWorkers 设置

如何判断如何设置这些设置?

我只是专门询问如何调整 Apache 2.4 而没有其他问题。这就是为什么这个问题与这个问题不同。

Ser*_*ker 46

  1. 认识到 Ubuntu 14.04 使用 Apache 2 和 PHP 通过mpm_prefork模块运行,其中一个可编辑的文件在 /etc/apache2/mods-enabled/mpm_prefork.conf 中。此外,请注意从 Apache 2.4 开始,MaxClients现在更名为MaxRequestWorkers,因此任何有关 MaxClients 的文档都需要切换到 MaxRequestWorkers。

  2. 使用以下命令暂时停止 Apache Web 服务:

    须藤服务 apache2 停止
  1. 等待 5 秒钟,然后运行以下命令以查看服务器上有多少可用的虚拟内存:
    须藤免费 -ht

阅读 Mem: 行并查看空闲列。将此视为您可以专用于 Apache 的 RAM 量,尽管我通常喜欢在更强大的服务器上扣除 2GB(如大于 4GB),或在更轻的服务器上扣除 1GB。所以,如果免费专栏说我有 13GB 的免费空间,我会建议给 Apache 11GB。那是一个基线。如果我们偶尔在日志中遇到任何数据库问题(例如在 3 天内在日志中出现 3 次)需要更多内存,那么我们可能会认为我们只有 10GB 而不是 11GB(在这种情况下) )。如果我们在 Apache 日志中遇到服务器需要更多 MaxRequestWorkers,那么这是一个单独的问题,我将在下面解决。

  1. 启动 Apache Web 服务器。
    须藤服务 apache2 启动
  1. 打开大约 10 个浏览器选项卡,从您的网站连接到一些较长或加载较慢的页面,并在每个选项卡上刷新 3-4 次。

  2. 完成后,现在快速运行以下命令:

    须藤ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache 内存使用量 (MB): "x/1024; 打印“平均进程大小(MB):”x/((y-1)*1024)}'

快速运行 5 次。

查看平均进程大小值并在您运行该值的 5 次中平均该值。

现在进行以下数学运算,并确保根据需要将 GB 转换为 MB,以便所有数字都以 MB 值表示。因此,要么乘以 1024,要么除以 1024,这取决于您需要走哪条路。

MaxRequestWorkers = Baseline Free(带缓冲空间)/平均进程大小

例如,我有一个 14GB 的服务器,但是当 Apache 停止时,服务器显示它在空闲时使用了 1GB 内存。然后我在一些额外的缓冲区空间中为操作系统提供另外 1GB 的空间,以防它需要它。这意味着我将拥有 12GB 的 Baseline Free。现在我必须将它从 GB 转换为 MB,所以我乘以 12 x 1024 并得到 12288。12288 MB 是我的 Baseline Free 值。就我而言,我看到平均进程大小为 21MB。所以,我取了 12288 / 21,我得到了大约 585。现在,系统管理员把这个值四舍五入是很常见的,所以我得到了 580。

  1. 编辑文件 /etc/apache2/mods-enabled/mpm_prefork.conf 并考虑将其设置为以下默认值,将 XXX 替换为您的 MaxRequestWorkers 计算:

`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>
Run Code Online (Sandbox Code Playgroud)

请注意,您可能在那里看不到 ServerLimit 参数。添加它。如果不存在,此参数默认为 256,但需要与 MaxRequestWorkers 的值相同,否则会出错。

  1. Apache 配置中的另一个关键因素是带有 Timeout 变量的 /etc/apache2/apache2.conf 文件,以秒为单位。这是您可以在超时之前从服务器发送或接收的时间。您还必须记住文件上传或文件下载,例如,如果您有一个网站,人们可以在其中上传或下载 CSV 或其他大文件。并且您需要记住一个繁忙的数据库服务器以及您可能需要在页面超时之前提供一些时间。您设置的 Timeout 变量越小,Web 服务器接收新连接的可用性就越高。但是请注意,将此值设置得太低可能会对 PHP 会话变量造成严重破坏,但不会对基于浏览器会话的 cookie 造成破坏。所以,例如,值 300(5 分钟)可能适用于依赖 PHP 会话变量而不是浏览器会话 cookie 的 Web 应用程序工作流的 Web 服务器。45 的值对于只提供静态广告登陆页面的 Web 服务器来说可能是好的,但对于需要大量使用 PHP 会话变量的服务器来说就很糟糕了。因此,将此文件中的超时参数编辑为您需要的数量。这可能需要对所有网页进行一些测试,以查看该值是否太低。不过,最好不要将其设置为高于 300,除非您在大文件上传或大文件下载中遇到问题。但是对于需要大量使用 PHP 会话变量的服务器来说会很糟糕。因此,将此文件中的超时参数编辑为您需要的数量。这可能需要对所有网页进行一些测试,以查看该值是否太低。不过,最好不要将其设置为高于 300,除非您在大文件上传或大文件下载中遇到问题。但是对于需要大量使用 PHP 会话变量的服务器来说会很糟糕。因此,将此文件中的超时参数编辑为您需要的数量。这可能需要对所有网页进行一些测试,以查看该值是否太低。不过,最好不要将其设置为高于 300,除非您在大文件上传或大文件下载中遇到问题。

  2. 现在重新启动您的 Apache Web 服务。如果您做错了什么,Apache 可能会在您再次启动它时告诉您,您可以纠正它。

    须藤服务 apache2 重启
  1. 现在重复你之前做的 10 选项卡浏览器技巧,看看你是否在 Apache Web 服务器错误日志中遇到 Apache 配置错误:
    须藤尾-f /var/log/apache2/error.log

...按 CTRL+C 退出,如果你愿意的话。

寻找有关需要 MaxRequestWorkers 的投诉(最近因为您重新启动了 Web 服务器)。如果您看到即使使用最佳 MaxRequestWorkers 设置,那么您的网站或 Web 应用程序也可能需要更多的火力。考虑以下选项:

  • 使用 CDN 进行大文件下载、图像和脚本。
  • 使用像 CloudFlare 或其他缓存服务。
  • 重做您的网站或 Web 应用程序策略,以使用多个 Web 服务器充当负载均衡器后面的一个“Web 应用程序”。
  • 向服务器添加更多 RAM,从而重新进行计算。

  1. 既然 Apache 服务器已经调优,它就可以进行基线调优了。您需要在 2-3 周内对其进行检查,并在 Apache 错误日志中查找 MaxRequestWorker 问题。据此,您可以做出优化决定(参见步骤 10)。您还可以在 Ubuntu 上安装带有 apt 的 Munin,并在您决定需要对 Web 服务器处理的流量做任何事情之前,查看 Apache 随时间推移的性能并绘制增长的想法。