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


18

当前在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广告系列加载了一个三页的注册表格。

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

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

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

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


您可能如何
珍妮D

@JennyD这篇文章对于这种特定需求而言太宽泛了。
ServerChecker 2015年

判断这些特定设置的方式是进行负载测试。
珍妮·D

@JennyD甚至比这更容易。只需在一天和平均时间内多次多次使用ap.sh脚本,并按以下cloudinservice链接进行数学运算,然后将MaxRequestWorkers设置为该值。然后,查看Apache日志中有关MaxRequestWorkers的问题,然后增加,添加更多的RAM,添加CloudFlare或添加另一个Web节点。无需进行非常严格的负载测试。
ServerChecker 2015年

您可以编写一个答案,其中包含有关该脚本的信息,以及包含在您自己的答案中的链接中的相关内容,以回答我指出的可能重复的问题。
珍妮·D

Answers:


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

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

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

阅读Mem:行,并查看免费专栏。尽管我通常喜欢在功能更强大的服务器(如大于4GB)中减去2GB或在更轻便的服务器上减少1GB,但可以将其视为可以分配给Apache的RAM数量。因此,如果免费专栏说我有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; 打印“平均进程大小(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是我的Baseline Free值。就我而言,我看到平均进程大小为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会话变量的服务器而言,这将是可怕的。因此,将此文件中的Timeout参数编辑为所需的数量。您可能需要对所有网页进行一些测试,以查看该值是否太低。但是,最好不要将其设置为大于300,除非您在上传大文件或下载大文件时遇到问题。但是对于需要大量使用PHP会话变量的服务器而言,这将是可怕的。因此,将此文件中的Timeout参数编辑为所需的数量。您可能需要对所有网页进行一些测试,以查看该值是否太低。但是,最好不要将其设置为大于300,除非您在上传大文件或下载大文件时遇到问题。但是对于需要大量使用PHP会话变量的服务器而言,这将是可怕的。因此,将此文件中的Timeout参数编辑为所需的数量。您可能需要对所有网页进行一些测试,以查看该值是否太低。但是,最好不要将其设置为大于300,除非您在上传大文件或下载大文件时遇到问题。

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

    sudo服务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,并查看Apache随时间推移的性能,并确定增长点,然后再决定需要对Web服务器处理的流量进行任何处理。

“虽然这些链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。” 如果链接的页面发生更改,仅链接的答案可能会失效。”
Jenny D

@JennyD好点!我会去做的。
ServerChecker 2015年

@Moderator我需要此答案的格式帮助。步骤7应该是带有缩进的conf文件。步骤11不应缩进。以开头的代码命令sudo需要显示为代码,而不是普通文本。我遵循了有关格式化的文档,但是在这里仍然很挣扎。
ServerChecker 2015年

1
我做了我能做的-markdown确实不能很好地完成混合列表和代码,但是我想无论如何我还是要把它变得更好。
珍妮D

对于像我这样的centos新手:ps -lyU apache而不是ps -ylC apache2
user1928596

3

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


对此进行剖析的好方法是什么?我可以键入哪些命令来查看每个apache进程在负载下使用了多少RAM?我们还需要用于MySQL(WordPress站点)和正常系统进程的RAM空间。
ServerChecker 2015年

查看正在运行多少个进程,然后运行free命令以获取内存基线。然后,通过增加MinSpareServers,重新启动apache,free再次运行以及进行数学运算来增加正在运行的进程数。请查看moreofless.co.uk/apache-memory-usage了解更多详细信息和说明。
g491

我现在知道,有一种超快速的方法可以做到这一点。我在下面的答案中的cloudinservice.com链接中对此进行了概述。该命令是某人发现的ap.sh。另外,我了解到MaxClients现在在Apache 2.4+中已重命名为MaxRequestWorkers。
ServerChecker 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.