MPM Prefork,apache2进程太多?

dyn*_*mic 6 linux settings mpm-prefork apache-2.2

我有这个设置:

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    ServerLimit      1250
    MaxClients            1250
    MaxRequestsPerChild   1500
</IfModule>
Run Code Online (Sandbox Code Playgroud)

当我做 top 时,是否有 5-10 个最小/最大服务器设置,有大量的 apache 2 进程?

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

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

编辑1:

在 30 分钟后,顶部屏幕显示:

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

UP 24 小时后(使用 MEM 的最高订购者)

感谢您的任何解释

(debian 6,灯,4GB 内存)

mat*_*tdm 12

我在关于服务器不响应 SSH 和 HTTP 但 ping 工作的评论中给了你这个答案,但显然你不相信我。真的,是真的!

您需要将MaxClients/ 调整ServerLimit到您的系统。您提到的“最小/最大服务器的 5-10 个设置”基本上无关紧要——这只是闲置的额外服务器的数量,而不做任何 Apache 将保留的事情。

为了适当地设置 MaxClients,请查看您的httpd(或apache2)进程的典型高水位线,然后除以可用内存。最好稍微下降一点,让系统的其余部分有喘息的空间。由于您有 4GB 的 RAM 和 185MB 的进程,这意味着您的ServerLimit值最多应该是 21 — 可能是 20 或 19。

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

如果您能找到一种方法来限制每个工人的内存使用量,那将是一场胜利。我敢打赌这是PHP Ate My RAM 的一个案例。你可以编写你的应用程序来生活在一个较低的范围内memory_limit吗?如果你不能这样做,你需要一个不同的模型来运行你的 PHP。如果你不能这样做,你需要购买更多的内存。


vor*_*aq7 8

Apache 的 prefork MPM 自我管理服务器。它总是从StartServers守护进程开始,并且永远不会运行少于MinSpareServers一次。MaxSpareServers如果服务器空闲时间足够长,它最终也会退役/杀死服务器(我不记得在这种情况下“足够长”是什么,也不记得是否/如何修改它)。

ServerLimit 设置可以在任何给定时间运行的 apache 守护进程的最大数量——这就是为什么在你的情况下你可以有数百个休眠的 apache 进程(它们被产生来服务大量的请求并且没有空闲足够长的时间来被母进程杀死)。


我个人认为1250是一个相当高的价值ServerLimit/ MaxClients- 250可能会更合理一些(尽管这可能导致偶尔的503 /服务器正忙的错误,如果你请求的特大洪水:如果变成慢性的问题,你可以增加数量或添加更多服务器来处理负载)。

将此问题与您之前的问题相关联:内存不足崩溃,请务必遵循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.
Run Code Online (Sandbox Code Playgroud)

……还有我个人的公理:It's better to give a client a 503 page than knock the server down. :)