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

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

目前,在 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>

该服务器是一台 8GB(RAM)的亚马逊服务器,其功能仅仅是为一些 Google 广告活动加载一份三页的注册表单。

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

[2015 年 4 月 21 日星期二 16:45:42.227935] [mpm_prefork:error] [pid 1134] AH00161:服务器已达到 MaxRequestWorkers 设置,请考虑提高 MaxRequestWorkers 设置

我怎样才能判断如何设置这些设置?

我专门问的是如何调整 Apache 2.4,而不是其他问题。这就是为什么这个问题与这个问题

答案1

  1. Ubuntu 14.04 使用 Apache 2,PHP 通过mpm_prefork模块,其中可编辑文件位于 /etc/apache2/mods-enabled/mpm_prefork.conf。另外,请注意,从 Apache 2.4 开始,最大客户数现已更名为最大请求工作者数,因此任何关于 MaxClients 的文档都需要切换到 MaxRequestWorkers。

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

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

阅读 Mem: 行并查看可用列。将其视为您可以专用于 Apache 的 RAM 量,尽管我通常喜欢在更强大的服务器上扣除 2GB(例如 > 4GB),或在更轻的服务器上扣除 1GB。因此,如果可用列显示我有 13GB 可用,我建议为 Apache 提供 11GB。这是一个基准。如果我们偶尔在日志中遇到任何数据库问题(例如在 3 天内在日志中出现 3 次)需要更多内存,那么我们可能会认为我们只有 10GB 可用,而不是 11GB(在本例中)。如果我们在 Apache 日志中遇到服务器需要更多 MaxRequestWorkers,那么这是我将在下面讨论的另一个问题。

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

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

    sudo ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache 内存使用情况(MB):"x/1024; print "平均进程大小(MB):"x/((y-1)*1024)}'

快速运行 5 次。

查看平均进程大小值,并在 5 次运行中取平均值。

现在进行以下计算,并确保根据需要将 GB 转换为 MB,以便所有数字都以 MB 为单位。因此,您可以乘以 1024 或除以 1024,具体取决于您需要哪种方式。

最大请求工作者数=无基线(带缓冲空间)/平均进程大小

例如,我有一台 14GB 的服务器,但是当 Apache 停止时,服务器显示它在空闲状态下使用了 1GB 的 RAM。然后,我为操作系统提供了另外 1GB 的额外缓冲区空间,以备不时之需。这意味着我将拥有 12GB 的可用基线。现在我必须将其从 GB 转换为 MB,因此我将乘以 12 x 1024 并得到 12288。12288 MB 是我的可用基线值。在我的例子中,我看到平均进程大小为 21MB。因此,我取 12288 / 21 并得到大约 585。现在,系统操作员通常会向下舍入这个值,所以我得到了 580。

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

`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

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

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

  2. 现在重新启动 Apache Web 服务。如果您做错了什么,Apache 可能会在您重新启动时通知您,然后您就可以纠正它。

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

...如果您愿意,请按 CTRL+C 退出。

查找有关需要 MaxRequestWorkers 的投诉(以及最近您重新启动 Web 服务器后出现的投诉)。如果您发现即使使用最佳 MaxRequestWorkers 设置,您也可能需要为您的网站或 Web 应用程序提供更多功能。请考虑以下选项:

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

  1. 现在 Apache 服务器已调整完毕,可以说是基本调整完毕。您需要在 2-3 周内检查它,并在 Apache 错误日志中查找 MaxRequestWorker 问题。然后,您可以做出优化决定(参见步骤 10)。您还可以在 Ubuntu 上使用 apt 安装 Munin,查看 Apache 随时间的性能,并绘制增长趋势,然后再决定是否需要对 Web 服务器处理的流量进行任何处理。

答案2

您可以将 MaxRequestWorkers 提高到多少取决于您的每个 httpd / apache 进程占用了多少 RAM。如果每个进程占用 50MB(随便选一个数字),那么您同时使用的每 20 个请求工作器(即并发连接)将占用 1GB。因此,在该示例中,您最多可以有 8GB * 20 = 160 MaxRequestWorkers。但是,您不能将所有 RAM 都用于 apache,您需要保留一些 RAM 供在其上运行的其他程序使用。此外,保留一些备用 RAM 也有助于提高性能,因为操作系统将使用它来缓存内容并加快性能(尽管与服务器特别快相比,最好不要耗尽连接,因为如果所有连接都用完了,则用户浏览器等待连接可用时,网站会显得很慢)。

相关内容