目前在 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) 的亚马逊服务器,它只是为一些谷歌广告活动加载一个三页的注册表单。
我在网上找到了一个名为apachetuneit.sh的脚本,但过了一会儿 Apache 报告了这个错误:
[Tue Apr 21 16:45:42.227935 2015] [mpm_prefork:error] [pid 1134] AH00161: 服务器达到 MaxRequestWorkers 设置,考虑提高 MaxRequestWorkers 设置
我如何判断如何设置这些设置?
我只是专门询问如何调整 Apache 2.4,仅此而已。这就是为什么这个问题与这个问题不同。
认识到 Ubuntu 14.04 使用 Apache 2 和 PHP 通过一个mpm_prefork模块运行,其中一个可编辑的文件位于 /etc/apache2/mods-enabled/mpm_prefork.conf。此外,请认识到从 Apache 2.4 开始,MaxClients现在被重命名为MaxRequestWorkers,因此任何有关 MaxClients 的文档都需要切换到 MaxRequestWorkers。
使用以下命令暂时停止 Apache Web 服务:
阅读 Mem: 行并查看 free 列。将此视为您可以专用于 Apache 的 RAM 量,尽管我通常喜欢在更强大的服务器上扣除 2GB(如 > 4GB),或者在更轻的服务器上扣除 1GB。所以,如果免费专栏说我有 13GB 的免费空间,我会建议给 Apache 11GB。这是一个基线。如果我们偶尔在日志中遇到任何数据库问题(例如在 3 天内的日志中出现 3 次)它需要更多内存,那么我们可能会认为我们只有 10GB 而不是 11GB(在这种情况下) )。如果我们在 Apache 日志中遇到服务器需要更多 MaxRequestWorkers,那么这是一个单独的问题,我将在下面解决。
打开大约 10 个浏览器选项卡,从您的网站连接到一些较长或加载速度较慢的页面,并在每个选项卡上刷新 3-4 次。
之后,现在快速运行以下命令:
快速运行 5 次。
查看“平均进程大小”值,然后在运行该值的 5 次中取平均值。
现在进行以下数学运算,并确保根据需要将 GB 转换为 MB,以便所有数字都以 MB 值表示。所以,要么乘以 1024,要么除以 1024,这取决于你需要走的路。
MaxRequestWorkers =可用基线(有缓冲区空间)/平均进程大小
例如,我有一个 14GB 的服务器,但是当 Apache 停止时,服务器显示它使用了 1GB 空闲的 RAM。然后我为操作系统提供另外 1GB 的额外缓冲空间,以备不时之需。这意味着我将有一个 12GB 的免费基线。现在我必须将它从 GB 转换为 MB,因此我乘以 12 x 1024 并得到 12288。12288 MB 是我的基线自由值。在我的例子中,我看到平均进程大小是 21MB。所以,我取 12288 / 21,我得到大约 585。现在,系统操作员通常会向下舍入这个值,所以我得到 580。
请注意,您可能看不到 ServerLimit 参数。添加它。如果不存在此参数,则默认为 256,但需要与 MaxRequestWorkers 的值相同,否则您将收到错误消息。
Apache 配置中的另一个关键因素是带有 Timeout 变量的 /etc/apache2/apache2.conf 文件,以秒为单位。这是在超时之前您可以从服务器发送或接收的时间。您还必须记住文件上传或文件下载,例如,如果您有一个网站,人们可以上传或下载 CSV 或其他大文件。并且您需要记住一个繁忙的数据库服务器,并且您可能需要在页面超时之前提供一些时间。使 Timeout 变量越小,Web 服务器接收新连接的可能性就越大。但是请注意,将此值设置得太低可能会对 PHP 会话变量造成严重破坏,尽管不会对基于浏览器会话的 cookie 造成破坏。所以,例如,值 300(5 分钟)可能对依赖于 Web 应用程序工作流的 PHP 会话变量而不是浏览器会话 cookie 的 Web 服务器有好处。对于只提供静态广告登陆页面的 Web 服务器来说,45 的值可能是好的,但对于需要大量使用 PHP 会话变量的服务器来说就很糟糕了。因此,将此文件中的 Timeout 参数编辑为您需要的数量。这可能需要对您的所有网页进行一些测试,以查看该值是否太低。但是,除非您在大文件上传或大文件下载中遇到问题,否则不要将其设置为高于 300 可能是个好主意。但是对于需要大量使用 PHP 会话变量的服务器来说会很糟糕。因此,将此文件中的 Timeout 参数编辑为您需要的数量。这可能需要对您的所有网页进行一些测试,以查看该值是否太低。但是,除非您在大文件上传或大文件下载中遇到问题,否则不要将其设置为高于 300 可能是个好主意。但是对于需要大量使用 PHP 会话变量的服务器来说会很糟糕。因此,将此文件中的 Timeout 参数编辑为您需要的数量。这可能需要对您的所有网页进行一些测试,以查看该值是否太低。但是,除非您在大文件上传或大文件下载中遇到问题,否则不要将其设置为高于 300 可能是个好主意。
现在重新启动您的 Apache Web 服务。如果你做错了什么,Apache 很可能会在你重新启动它的那一刻告诉你,你可以纠正它。
...如果您愿意,请按 CTRL+C 摆脱这种情况。
寻找关于需要 MaxRequestWorkers 的投诉(最近因为您重新启动了 Web 服务器)。如果您发现即使使用最佳 MaxRequestWorkers 设置,您的网站或 Web 应用程序也可能需要更多的火力。考虑以下选项:
您可以将 MaxRequestWorkers 提高到多少取决于您的每个 httpd / apache 进程占用多少 RAM。如果每个占用 50MB(只是选择一个随机数),那么您同时使用的每 20 个请求工作人员(即并发连接)将占用 1GB。所以在那个例子中,你最多可以有 8GB * 20 = 160 MaxRequestWorkers。但是,你不能为 apache 用完所有的 RAM,你需要保留一些用于在那里运行的其他东西。还留一些备用 RAM 有助于提高性能,因为操作系统将使用它来缓存内容并提高性能(尽管与服务器速度相比,最好不要用完连接,因为站点会显得很慢,而用户的浏览器等待连接可用,如果它们都用完了)。