我认为MaxClients只是一个限制,当服务器达到极限时,它显示了一些防止过载的人的空白页面。 此外,我认为这只是一个限制,所以备用连接不使用,除非他们需要,他们在那之后被释放。 但我的服务器机器似乎否认这一切。
几个月前,在我的服务器机器的Apache日志里反复“考虑上升MaxClient”行。 在我意识到发生了什么之前,服务器堆积CPU负载,然后机器完全崩溃。 在我将MaxClient值从500增加到900(MPM prefork)之前的一周左右,就发生了3次。
[最后的崩溃*]很久以后,2个星期前,有一个由实际访问造成的连接高峰(我们发表了一些“exlusive”信息)。 它可能达到900的限制(它在login时出现一次),服务器开始滞后,并在几分钟内再次坠毁。 这与2小时停电(文件系统已损坏)结束。
所以现在我有MaxClient = 2000,但是我有问题,出现在[Last crash *]前几天。 所以我其实不知道这是否相关。
这些是我的症状:
这是我的MPM prefork设置 (24GB RAM,Apache + MySQL +数据):
StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 2000 MaxClients 2000 MaxRequestsPerChild 0
我也有KeepAliveclosures。 那可以在这个行为中扮演一些angular色吗?
KeepAlive Off MaxKeepAliveRequests 0 KeepAliveTimeout 2
从服务器状态:当前正在处理的40个请求中,现在有0个(或多达12个)闲置的工作人员。 这是星期六晚上。 现在我得到了非常相似的数字,但周日中午是阳光充足的…该死的xD
首先,我认为这是错误的PHP脚本,但我不知道什么现在。 当问题第一次出现时,没有人似乎改变任何脚本。 碰到极限时奇怪的崩溃行为告诉我,有可能是错误的东西(特别是当上升值有帮助,它看起来不像内存不足)。
我很遗憾,用尽了描述。 我通常不会在search前提出要求,但今天我已经认真地用完了想法。 我无法一直重新启动。 这2秒无关紧要,但也有一些主要脚本无法完成工作的机会,或编辑在错误的时刻点击保存button而失去了工作。
所以,为了简单起见,我希望你对我的Apache的设置的意见,如果这甚至可能与我的负载问题有一些相关性。
即使使用24 GB RAM,您的MaxClients也可能太高。 这是我用于近似的平均httpd(如果在Debian发行版上replaceapache2)进程大小:
ps -ylC httpd --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'
一旦你有了这个数字,说90%的系统的RAM(假设这个服务器只提供networkingstream量,并没有MySQL和其他服务),并除以平均httpd进程大小,例如:
22,118 MB / 50 = 442
所以你将MaxClients(和ServerLimit)设置为440左右。
既然你在这个服务器上也有MySQL,那么你需要更加保守一点,可能占用系统内存的50%,并把它除以平均的httpd进程的大小,导致MaxClients为245。
尝试这个:
Timeout 300 KeepAlive On MaxKeepAliveRequests 28800 KeepAliveTimeout 260 ListenBackLog default StartServers 4 ServerLimit 16 ThreadLimit 2048 MaxClients 2048 MinSpareThreads 32 MaxSpareThreads 64 ThreadsPerChild 128 MaxRequestsPerChild 0
作为解决方法,您可以尝试将MaxRequestsPerChild设置为非零值。