高stream量网站的Apache 2设置

我在我的网站上遇到问题。 这是一个亚马逊ec2服务器与15Gb RAM和4个CPU后面的LB.

apachetop说我得到每秒80左右,这似乎真的很低这种服务器和负载(由顶部给出)通常在15左右,但在24小时增加到约150。 我在任何时候看到大约100个活跃的apache进程。 Apache处于prefork模式。

Mysql在服务器上使用得非常less,几乎没有静态文件。

这是我的Apache设置:

Timeout 20 KeepAlive Off MaxKeepAliveRequests 0 KeepAliveTimeout 3 <IfModule mpm_prefork_module> StartServers 40 MinSpareServers 25 MaxSpareServers 40 ServerLimit 400 MaxClients 400 MaxRequestsPerChild 4 </IfModule> 

任何人都可以build议如何调整设置? 感谢名单!

编辑:configuration是通过反复试验得到的。 任何和我的意思是一个数字,改变这些线路使得负载在5分钟内飞涨。 在几分钟之内,它会跳跃到200-300。 特别是MaxRequestsPerChild。 我已经尝试了10,15,100,1000和负载只是天空。

关于PHP – 实际上只有几个PHP文件,其实并不是那么昂贵。 他们只是吐出一些简单的东西。

如果我打开KeepAlive加载也去空间..

编辑:这是服务器状态给出的:

 Current Time: Monday, 16-Apr-2012 07:26:07 UTC Restart Time: Monday, 16-Apr-2012 07:06:44 UTC Parent Server Generation: 3 Server uptime: 19 minutes 22 seconds Total accesses: 65803 - Total Traffic: 51.8 MB CPU Usage: u24.25 s1.99 cu0 cs0 - 2.26% CPU load 56.6 requests/sec - 45.7 kB/second - 825 B/request 65 requests currently being processed, 0 idle workers WWWCWWCCWWWWCCCWWCWWCWCWWCCWWWCCWWWCWWCWWWSWC..C..W...WCCCC.C.GW CWCC.CWWCCC.WC.................................................. ................................................................ ................................................................ ................................................................ ................................................................ ................ 

我可以在“等待”模式下看到很多连接,但我不确定为什么req / sec如此之低。 只有56和那么多插槽是空的…

更新:我已经改变了一些代码,删除了所有可能会减慢速度的例程,而且我仍然只获得每秒100次的请求。 负荷稳定在10左右

我认为这些机器应该可以做得更多…

你的情况告诉我,PHP脚本正在等待完成的东西(如SQL查询或API调用)。 你应该可以打开Apache的扩展状态模块,以更好地了解Apache正在做什么。

为此,在你的httpd.conf中,你需要启用mod_status并且打开'ExtendedStatus On'(参见: http : //httpd.apache.org/docs/2.0/mod/mod_status.html#extentionstatus )

例如。

 LoadModule status_module modules/mod_status.so ExtendedStatus On <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from xxx.xxx.xxx.xxx </Location> 

将xxx.xxx.xxx.xxxreplace为您希望能够访问状态页面的IP,然后点击http://yoursite.com/server-status查看输出&#x3002; 大多数configuration可能已经在.conf文件中,或者已经被注释掉了。

一旦你有权访问它,你会看到类似于:

 K___K_W_........................................................ ................................................................ ................................................................ ................................................................ Scoreboard Key: "_" Waiting for Connection, "S" Starting up, "R" Reading Request, "W" Sending Reply, "K" KeepAlive (read), "D" DNS Lookup, "L" Logging, "G" Gracefully finishing, "." Open slot with no current process 

这给了你更多关于Apache后台发生的事情的想法。 如果我的第一个假设是正确的(即你的PHP脚本正在等待什么),那么你会看到很多'W'模式的任务。

试试看 – 如果你仍然需要帮助,让我知道上面的输出是什么样的。

即使是15的平均负载也太高 – 这表明系统正在经受瓶颈。

什么在Apache中运行?

如果是dynamic内容,请检查CPU是否被完全利用; 代码可能需要一些优化,或者您可能需要扩展到更多的EC2实例来处理内容的CPU要求。

如果它涉及到客户端加载大量的数据,那么你可能会超载磁盘(检查顶部的iowait数字),甚至可用的带宽。

根据运行情况,您可以使用性能比prefork更好的MPM。

MaxRequestsPerChild 4非常低 – 你知道这是为什么吗? 为什么要设置KeepAlive Off ? 从性能的angular度来看,这两种设置都非常糟糕; 你能给一些关于如何configuration到什么地方的背景吗?