无论访问造成实际的服务器压力,高MaxClient值是否会导致CPU负载问题?

我认为MaxClients只是一个限制,当服务器达到极限时,它显示了一些防止过载的人的空白页面。 此外,我认为这只是一个限制,所以备用连接不使用,除非他们需要,他们在那之后被释放。 但我的服务器机器似乎否认这一切。

几个月前,在我的服务器机器的Apache日志里反复“考虑上升MaxClient”行。 在我意识到发生了什么之前,服务器堆积CPU负载,然后机器完全崩溃。 在我将MaxClient值从500增加到900(MPM prefork)之前的一周左右,就发生了3次。

[最后的崩溃*]很久以后,2个星期前,有一个由实际访问造成的连接高峰(我们发表了一些“exlusive”信息)。 它可能达到900的限制(它在login时出现一次),服务器开始滞后,并在几分钟内再次坠毁。 这与2小时停电(文件系统已损坏)结束。

所以现在我有MaxClient = 2000,但是我有问题,出现在[Last crash *]前几天。 所以我其实不知道这是否相关。

这些是我的症状:

  • 随机CPU负载增加(最高达到12,平时负载5以下)直到重启Apache,重启后负载迅速下降
  • 重新启动后,花费数小时至数天才再次出现
  • 这个负载增加似乎增加了像“5”现有的负载,这意味着,在早上它是约。 2 + 5,如果我不会重新启动Apache,它实际访问量更高(高峰12-14)
  • 当它达到高峰时,它不会下降,直到重新启动,不pipe白天还是实际访问
  • 似乎随机时间开始的负载问题,高峰,晚上,上午,周一,周六无所谓
  • 这个负载似乎不会影响性能(但我不喜欢它,如果没有其他的东西,它会缩短CPU的使用寿命)
  • 负载是由Apache确定(顶部,htop检查)

这是我的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设置为非零值。