达到了与MaxClients挂起的Apache

当达到MaxClients时,我的Apache 2.2(瓶坯MPM)挂起,而不是排队请求并在subprocess变成空闲时提供服务。 发生这种情况时,Web服务器完全无响应,直到手动重新启动。

服务器堆栈是Ubuntu 8,MySQL 5,PHP 5.硬件是Dual Xeon(2.8),带有2GB的RAM。 它每天提供30,000 – 50,000次综合浏览量。 静态图像,CSS和JS被卸载到一个单独的服务器和PHPcaching使用eAccelerator。 许多页面的HTML输出caching到文件系统。

相关的Apache指令:

 KeepAlive On MaxKeepAliveRequests 50 KeepAliveTimeout 2 StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 2000 

看来你的服务器正在交换。 假设apache进程使用16 MB,150 x 16 MB = 2400 MB,超出服务器容量(2 GB)

检查Apache使用的内存,我想你将需要减lessMaxClients值。

您可以从Apache Performance Tuning的“ 硬件和操作系统问题”部分中find关于此的更多信息

什么是您的超时variables设置?

如果你没有设置,你可能想把它推下去:

 Timeout 30 

正如HD所说的,您可能希望放下您的MaxClients或增加RAM以确保它不会交换。

计算MaxClients并根据该值设置一个值,而不是默认值。

计算最大客户

首先计算apache儿童在stream量高时的平均记忆。

除以你想分配给Apache的内存。

在你的情况下,如果你想给1 GB的内存networking服务器和平均进程内存使用量是16 MB,那么1000 MB / 16 = 62

这是你应该给的max_client值。

还要确保你正在configurationprefork而不是worker

如果我没有错,这些是prefork的variables –

比MinSpareServers

 MaxSpareServers MaxClients MaxRequestsPerChild 

因为你在同一台机器上运行mysql和apache。你需要添加更多的内存,否则将耗尽内存并开始交换,进一步减速。