当前位置: 首页>>技术教程>>正文


如何在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)的Amazon服务器,只不过为某些Google广告系列加载了three-page注册表格。

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

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

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

我仅在询问如何调整Apache 2.4,而没有其他要求。这就是为什么这个问题与this question不同的原因。

最佳办法

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

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

    sudo service apache2 stop
  1. 等待5秒钟,然后运行以下命令来查找服务器上可用的虚拟内存量:

    sudo free -ht

阅读Mem:行,并查看免费专栏。尽管我通常喜欢在功能更强大的服务器(如大于4GB)中减去2GB或在更轻便的服务器上减少1GB,但可以将其视为可以分配给Apache的RAM数量。因此,如果免费专栏说我有13GB的免费空间,我建议给Apache 11GB。那是基线。如果我们偶尔在日志中遇到任何数据库问题(例如在3天的时间里日志中有3次),则它需要更多的内存,那么我们可能会认为只有10GB可以玩,而不是11GB(在这种情况下) )。如果我们在Apache日志中遇到服务器需要更多MaxRequestWorkers的问题,那么这是我将在下面解决的另一个问题。

  1. 启动Apache Web服务器。

    sudo service apache2 start
  1. 像打开10个浏览器选项卡一样打开,从您的网站连接到更长的页面或slower-loading,然后在每个选项卡上刷新3-4次。

  2. 之后,立即运行以下命令:

    sudo ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}'

快速运行5次。

查看“平均流程大小”值,然后将其平均5次运行。

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

MaxRequestWorkers =无基线(具有缓冲区空间)/平均进程大小

例如,我有一台14GB的服务器,但是当Apache停止时,该服务器显示它在空闲状态下使用了1GB RAM。然后,我为操作系统提供了一些额外的1GB的额外缓冲空间,以备需要时使用。这意味着我将拥有12GB的免费基准。现在,我必须将其从GB转换为MB,因此我将12 x 1024乘以得到12288。12288MB是我的免费基准值。就我而言,我看到平均进程大小为21MB。因此,我采用12288/21,我得到大约585。现在,sysops将这个值四舍五入是很常见的,所以我得到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配置中的另一个关键因素是带有Timeout变量的/etc/apache2/apache2.conf文件,以秒为单位。这是您可以在服务器超时之前从服务器发送或接收的时间。您还必须牢记文件上传或文件下载,例如,如果您有一个网站,人们可以在其中上传或下载CSV或其他大文件。并且您需要记住繁忙的数据库服务器,并且可能需要在页面超时之前提供一些时间。使Timeout变量越小,Web服务器就越有能力接收新连接。但是请注意,将此值设置得太低可能会破坏PHP会话变量,尽管不会导致基于浏览器会话的cookie。因此,例如,对于依赖于Web应用程序工作流的PHP会话变量而不是浏览器会话cookie的Web服务器,值300(5分钟)可能会更好。值45可能对只提供静态广告登陆页面的Web服务器是好的,但对于需要大量使用PHP会话变量的服务器来说则是可怕的。因此,将此文件中的“超时”参数编辑为所需的数量。您可能需要对所有网页进行一些测试,以查看该值是否太低。但是,最好不要将其设置为大于300,除非您在大型文件上传或大型文件下载中遇到问题。

  2. 现在,重新启动Apache Web服务。如果您做错了什么,Apache可能会在您再次启动它时将其告知您,并且您可以进行纠正。

    sudo service apache2 restart
  1. 现在,重复之前所做的10选项卡浏览器技巧,并在Apache Web服务器错误日志中查看是否遇到Apache配置错误:

    sudo tail -f /var/log/apache2/error.log

…如果需要,请按CTRL + C摆脱该限制。

查找有关需要MaxRequestWorkers的投诉(以及最近重新启动Web服务器以来的投诉)。如果您看到最佳的MaxRequestWorkers设置,那么您的网站或Web应用程序可能需要更多的强大功能。考虑以下选项:

  • 使用CDN进行大文件下载,图像和脚本。

  • 使用缓存服务,例如CloudFlare或其他。

  • 重做您的网站或Web应用程序策略,以使用多个Web服务器充当负载均衡器后面的一个”web app”。

  • 向服务器添加更多RAM,从而再次进行此计算。


  1. 现在已经调整了Apache服务器,已经有点基线调整了。您需要在2-3周的时间内进行检查,并在Apache错误日志中查找MaxRequestWorker问题。由此,您可以决定优化(请参见步骤10)。您还可以在Ubuntu上使用apt安装Munin,并查看Apache随时间推移的性能,并确定增长点,然后再决定需要对Web服务器处理的流量进行任何处理。

次佳办法

可以将MaxRequestWorkers提高到什么取决于每个httpd /apache进程占用多少RAM。如果每个人占用50MB(只是选择一个随机数),那么您一次使用的20个请求工作程序(即并发连接)将占用1GB。因此,在该示例中,您最多可以有8GB * 20 = 160个MaxRequestWorkers。但是,您无法用完所有的RAM用于Apache,需要为其中运行的其他内容保留一些内存。另外,留出一些备用RAM有助于提高性能,因为OS会使用它来缓存内容并提高性能(尽管与服务器相比,不浪费连接数可能更可取,因为服务器在站点运行缓慢时会显得很慢)用户的浏览器等待连接耗尽(如果它们用尽了)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9524.html,未经允许,请勿转载。