MPM Prefork,apache2过程太多了?

我有这个设置:

<IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 1250 MaxClients 1250 MaxRequestsPerChild 1500 </IfModule> 

是可能的,与5-10最小/最大服务器设置当我做顶,有吨的Apache 2进程?

他们不应该只在5-10之间吗? 只要看看260进程的睡眠O_O(d * mn apache)

点击http://img200.imageshack.us/img200/3285/senzatitolo1iw.jpg

EDIT1:

在这里过了30分钟后,

点击: http : //img816.imageshack.us/img816/1645/immagineov.png

经过24小时的UP(用于MEM使用的顶级订购者)

感谢您的任何解释

(debian 6,lamp,4gb ram)

我给你的答案在服务器上没有回应SSH和HTTP的意见, 但平能工作 ,但显然你不相信我。 真的,这是真的!

您需要将MaxClients / ServerLimit大小MaxClients为您的系统。 你提到的“最小/最大服务器的5-10个设置”基本上是不相关的 – 这只是额外的服务器数量,没有做任何Apache将保留的东西。

为了正确设置MaxClients,请查看httpd (或apache2 )进程的典型高水位标记,然后按可用内存划分。 最好放下一点点,让系统的其余部分呼吸。 既然你有4GB的内存和185MB的进程,这意味着你的ServerLimit值最多应该是21,大概是20或者19。

现在,可能190MB是非典型的。 您可以根据对典型用法的不同估计值,将ServerLimit设置得更高,但基本上赌博是永远不会有高峰的。 如果确实发生,你的系统将会失去内存 。

如果你能find一种方法来限制你的每个工作者的内存使用量,这将是一个胜利。 我打赌这是PHP吃了我的RAM的情况 。 你可以编码你的应用程序生活在一个较低的memory_limit ? 如果你不能这样做,你需要一个不同的模型来运行你的PHP。 如果你不能这样做,你需要购买更多的内存。

Apache的prefork MPM自我pipe理服务器。 它总是以StartServers守护进程开始,并且一旦启动就永远不会less于MinSpareServers 。 如果服务器闲置了足够长时间(我不记得在这种情况下“Long Enough”是什么,也不知道如何/如何修改),它最终会退出/closures超过MaxSpareServers服务器。

ServerLimit设置可以在任何给定时间运行的Apache守护进程的最大数量 – 这就是为什么在你的情况下,你可以有数百个熟睡的Apache进程(它们被派生到服务大量的请求,并没有足够长的闲置时间被母亲过程杀死)。


我个人认为1250对ServerLimit / MaxClients来说是相当高的价值 – 250可能是一个更合理的数字(尽pipe这可能会导致偶然的503 /服务器繁忙错误,如果你得到大量的请求:如果这成为一个慢性问题您可以增加数量或添加更多的服务器来处理负载)。

把这个问题和你以前的问题联系起来Re:内存不足的崩溃,一定要遵循Apache手册中有关这个参数的指导:

 Most important is that MaxClients be big enough to handle as many simultaneous requests as you expect to receive, but small enough to assure that there is enough physical RAM for all processes. 

…和我个人的公理: It's better to give a client a 503 page than knock the server down 。 🙂

closuresKeepalive并将MaxClients设置为150.最有可能的原因是你有260个进程只是坐在那里,因为Apache正在尽量保持浏览器连接打开,因为KeepAlive on是在你的Apacheconfiguration文件中设置的。

通过运行以下命令,计算可以在系统内存限制内运行的服务器数量:

 $ ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}' 

如果会产生像这样的输出:

 Apache Memory Usage (MB): 1608.76 Average Process Size (MB): 55.4745 

现在停止apache,并找出多less内存你没有它可用free使用:

              total      used      free    shared    buffers    cached Mem:      7629384    7415780    213604          0    333428    5341884 -/+ buffers/cache:    1740468    5888916 Swap:      7629380      7968    7621412 

(上面是千字节, free -m会显示你兆字节)

Linux将用缓冲区和caching填充可用内存,因此,添加free + buffers + cache(213604 + 333428 + 5341884)将产生5888916 KB的可用空间。

588916K可用/每个apache进程55474K = 106个服务器。 但设置低于那留下一些喘息的空间。

根据我的经验,在正确设置其他有关进程数量的参数后,需要努力调整KeepAliveTimeout 。 我说调整这意味着你应该稍微改变参数,并衡量服务器的响应。 在我们的网站中,有一个KeepAliveTimeout=3 ,另一个KeepAliveTimeout=1KeepAliveclosures时,这些都不满意。 这个额外的调整可以避免您太早购买/分配额外的RAM。

调整很简单,因为更改在平稳重启后立即生效:

sudo apache2ctl -k graceful

(我正在恢复一个旧线程,因为Google仍然认为它是相关的…))