Apache2 PHP网站 – 击中MaxClients限制 – 诊断?

我们有一个中等stream量的网站(每天大概20,000次点击),从Amazon EC2 c1.small实例(1.7 Gb的RAM)在Apache 2.2,Ubuntu 9.10服务器上运行PHP / MySQL应用程序。

我们遇到了网站反复无响应的问题。 作为一个肮脏的黑客,我把MaxClients / ServerLimit设置为450。

<IfModule mpm_prefork_module> KeepAlive On KeepAliveTimeout 7 StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 450 ServerLimit 450 MaxRequestsPerChild 0 </IfModule> 

该网站似乎比以前更长,但仍然死亡。 检查进程列表,我有(第三列是物理mem,第四列是虚拟大小):

 xxxxxxxxx@domU-XXXXXXXXX:/etc/apache2$ ps -eo pid,user,rss,vsz,args | grep apache 2333 root 11092 39084 /usr/sbin/apache2 -k start 3704 www-data 11060 41292 /usr/sbin/apache2 -k start 3826 www-data 10016 39844 /usr/sbin/apache2 -k start 3954 www-data 11976 41612 /usr/sbin/apache2 -k start 4061 www-data 11844 41668 /usr/sbin/apache2 -k start 4064 www-data 10988 40676 /usr/sbin/apache2 -k start 4084 www-data 11804 41428 /usr/sbin/apache2 -k start 4086 www-data 10192 39828 /usr/sbin/apache2 -k start 4099 www-data 11876 41748 /usr/sbin/apache2 -k start 4100 www-data 10980 40668 /usr/sbin/apache2 -k start 4102 www-data 8952 39724 /usr/sbin/apache2 -k start 4107 www-data 11856 41860 /usr/sbin/apache2 -k start 4108 www-data 9952 39604 /usr/sbin/apache2 -k start 4109 www-data 0 0 [apache2] <defunct> 4114 www-data 7172 39724 /usr/sbin/apache2 -k start 4115 www-data 10968 40668 /usr/sbin/apache2 -k start 4122 www-data 11888 41844 /usr/sbin/apache2 -k start 4123 www-data 11584 41444 /usr/sbin/apache2 -k start 4124 www-data 7036 39596 /usr/sbin/apache2 -k start 4125 www-data 6744 39084 /usr/sbin/apache2 -k start 4126 www-data 9532 39552 /usr/sbin/apache2 -k start 4127 www-data 10112 39812 /usr/sbin/apache2 -k start 4128 www-data 6600 39084 /usr/sbin/apache2 -k start 4129 www-data 6736 39084 /usr/sbin/apache2 -k start 4130 www-data 7004 39596 /usr/sbin/apache2 -k start 4131 www-data 6740 39084 /usr/sbin/apache2 -k start 4132 www-data 11616 41596 /usr/sbin/apache2 -k start 4134 www-data 7024 39588 /usr/sbin/apache2 -k start 4135 www-data 11808 41516 /usr/sbin/apache2 -k start 4136 www-data 7008 39460 /usr/sbin/apache2 -k start 4137 www-data 6988 39460 /usr/sbin/apache2 -k start 4139 1003 796 3040 grep --color=auto apache victorhooi@domU-12-31-39-02-B6-34:/etc/apache2$ 

有一个简单的方法来找出究竟是怎么回事? 我对Apache内部的理解不是那么好,但是我会认为我们不需要这么多的并发进程来处理像这样的页面,这种stream量。 我们确实inheritance了这个应用程序,所以我们对它的内部知之甚less,但是这是一个非常基本的CMStypes的网站,显示了一些search结果,我不认为它需要这样的咕噜声。

我在网站上运行了ab,我的请求率很低(每秒低于50),但这可能是我糟糕的select – 很多请求似乎都失败了。

我应该在哪里寻找有关正在发生的事情的信息,或者我可以尝试的任何故障排除提示?

干杯,维克多

每个RSS约为10MB的儿童超过4GB的潜在内存使用量。 足以导致您的c1.small实例交换。 对于apache服务器来说,交换几乎总是一个向下的螺旋。

我会说接下来要检查的几件事情是
– apache的错误日志提到击中maxclients
– dmesg或/ var / log / messages是否会提及OOM杀手?
– 是服务器交换
内存使用增长缓慢而稳定或尖锐/快速发展

前两个只是看txt文件。 第三,你可以做cli但图表会有所帮助,第四你需要图表。 设置Apache的mod_status(可能已经在那里只是取消注释)并指向munin / collectd / cacti。

如果你确认原因是内存耗尽和交换,那么你可以从那里做很多事情。 首先,你可以将你的maxclients降低到150左右。这会为其他的东西和文件系统caching留下一些空间(如果这样的话,在这里留下更多的mysql)。 RSS是一个粗略的度量,像这样推断它只是我们所得到的。 一旦你调整了一段时间看图表,看看你有上升或下降的空间。 从那里你可以专注于1.)瘦apache儿童(less模块,收紧phpconfiguration)2.)有Apache做less(混合cdn,替代HTTP服务器和HTTP代理选项)3.)升级$$$

您可能会有长时间超时连接的服务器持续连接。 随着更多的客户端继续连接,他们占用越来越多的Apache进程。 在持续连接的情况下,每个客户端可以连接到您的服务器1(或更多)。

查看更多信息: http : //httpd.apache.org/docs/1.3/misc/perf-tuning.html

我最近将一些性能调整技巧整合到了http://www.anchor.com.au/hosting/dedicated/improving-server-capacity工作中&#xFF0C; 对于我最近应用的机器来说,它工作得很好。 除此之外,如果这是一个更广泛的机器性能问题,可能并不是Apache特有的,我在http://www.anchor.com.au/hosting/development/HuntingThePerformanceWumpus上有了更深入的文章。确定系统的哪个组件正在引起问题&#x3002;

您也可以尝试告诉Apache启动50个进程(StartServers 50),以便在启动时无需经过整个服务器扩展例程,尝试将最大备用服务器调高到20个,如果你的要求波动起来,不要死亡。