MPM Prefork,apache2 进程太多了吗?

MPM Prefork,apache2 进程太多了吗?

我有这样的设置:

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

当我执行 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、lamp、4GB 内存)

答案1

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

您需要调整系统的大小MaxClientsServerLimit您提到的“最小/最大服务器的 5-10 个设置”基本上无关紧要——这只是额外的服务器闲置而不执行 Apache 将保留的任何操作。

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

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

如果你能找到一种方法来限制每个 worker 的内存使用量,那将是一个胜利。我敢打赌,这是一个PHP 占用了我的内存。您能否编写应用程序以使其在较低的内存中运行memory_limit?如果您做不到这一点,则需要使用不同的模型来运行 PHP。如果您做不到这一点,则需要购买更多 RAM。

答案2

Apache 的 prefork MPM 可自行管理服务器。它始终以守护进程启动,并且一旦启动StartServers便不会运行少于一次。如果服务器闲置时间足够长,它最终也会淘汰/关闭多余的服务器(我不记得在这种情况下“足够长”是什么意思,也不记得是否/如何修改它)。MinSpareServersMaxSpareServers

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.

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

答案3

关闭 Keepalives 并将 MaxClients 设置为 150。您有 260 个进程静静地待在那里的最可能原因是因为 Apache 尽职尽责地保持浏览器连接打开,因为在您的 apache 配置文件中设置了 KeepAlive on。

答案4

KeepAliveTimeout根据我的经验,在正确设置有关进程数的其他参数后,值得进行调整。我说调整,这意味着您应该稍微更改参数并测量服务器响应能力。在我们的网站中,一个网站表现最好,而KeepAliveTimeout=3另一个网站则表现最好KeepAliveTimeout=1。关闭这些网站都不满意KeepAlive。这种额外的调整可以避免您过早购买/分配额外的 RAM。

调整很容易,因为更改在正常重启后立即生效:(

sudo apache2ctl -k graceful

我正在恢复一个旧线程,因为 Google 仍然认为它相关... ;) )

相关内容