如何在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广告系列加载三页registry单外,

我在网上发现了一个名为apachetuneit.sh的脚本,但之后Apache报告了这个错误:

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

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

我只是问如何调整Apache 2.4,没有别的。 这就是为什么这个问题不同于这个问题 。

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

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

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

    阅读Mem:行并查看空闲列。 考虑到这个数量可以专门用于Apache,尽pipe我通常喜欢在更强大的服务器上(比如大于4GB)扣除2GB,或者在较轻的服务器上扣除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 Memory Usage(MB):”x / 1024; 打印“平均处理大小(MB):”x /((y-1)* 1024)}' 

    快速运行5次。

    查看“平均过程大小”值,并在您运行5次的平均值中取平均值。

    现在执行下面的math计算,并确保将GB转换为MB,以便所有数字均以MB值表示。 所以,不pipe乘以1024还是1024,取决于你需要走哪条路。

    MaxRequestWorkers = 基线空闲 (有缓冲区空间)/ 平均处理大小

    例如,我有一个14GB的服务器,但是当Apache被停止时,服务器显示它在闲置时使用1GB RAM。 然后我为操作系统提供另一个1GB的额外缓冲空间,以备需要时使用。 这意味着我将有一个免费的12GB的基准。 现在我必须将其从GB转换为MB,所以我乘以12 x 1024并得到12288. 12288 MB是我的基线自由值。 就我而言,我看到平均进程大小为21MB。 所以,我拿12288/21,我得到了大约585.现在,pipe理员通常会把这个数值舍去,所以我得到了580。

    1. 编辑文件/etc/apache2/mods-enabled/mpm_prefork.conf并考虑将其设置为以下默认值,用您的MaxRequestWorkers计算replaceXXX:
    
    
     `<IfModule mpm_prefork_module>` StartServers 2 MinSpareServers 2 MaxSpareServers 5 MaxRequestWorkers XXX ServerLimit XXX MaxConnectionsPerChild 0 </IfModule> 

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

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

    2. 现在重新启动您的Apache Web服务。 如果你做错了,Apache可能会在你重新启动的那一刻告诉你,你可以纠正它。

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

    …按CTRL + C来摆脱这一点,如果你想。

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

    • 将CDN用于大型文件下载,图像和脚本。
    • 使用像CloudFlare或其他的caching服务。
    • 重做您的网站或Web应用程序策略,以使用多个Web服务器作为负载均衡器后面的一个“Web应用程序”。
    • 添加更多的RAM到服务器,从而再次做这个计算。

    1. 现在Apache服务器已经调整好了,这是基本调整的。 您需要在2-3周的时间内检查它,并在Apache错误日志中查找MaxRequestWorker问题。 由此,您可以对优化做出决定(请参阅步骤10)。 你也可以在Ubuntu上用apt安装Munin,随着时间的推移看看Apache的性能,并在决定你需要做任何有关Web服务器处理的stream量的事情之前,绘制一个增长的想法。

    您可以提高MaxRequestWorkers的数量取决于您的httpd / apache进程占用了多less内存。 如果每个人占用50MB(只是select一个随机数),那么你每次使用的20个请求工作者(即并发连接)将占用1GB。 所以在这个例子中,最多可以有8GB * 20 = 160 MaxRequestWorkers。 但是,你不能用完所有的Apache的RAM,你需要保留一些其他的东西在那里运行。 也留下一些备用RAM可以帮助提高性能,因为操作系统将使用它来caching事物并加速性能(尽pipe可能最好不要耗尽连接,用户的浏览器等待连接可用,如果他们都用完了)。