当我启动 apache 并继续杀死我的机器时,如何防止产生大量 apache 进程?

2024-03-24

我在一台 Debian 机器上有一个流量很大的应用程序,而 apache 开始表现得很奇怪。

每次我启动 apache 时,都会生成大量的 apache 进程,应用程序根本无法加载,并且整个机器很快就会冻结,必须重新启动才能重新启动。

这是启动 apache 后立即得到的 top 信息:



top -   20:14:44    up         1:16,      2 users,    load average: 0.48, 0.10, 0.03
Tasks:  330 total,  5 running, 325 sleeping,   0 stopped,   0 zombie
Cpu(s): 12.0%us,    21.4%sy,   0.0%ni,        65.7%id,   0.2%wa,  0.1%hi,  0.7%si,  0.0%st
Mem:    8179920k    total,     404984k used,  7774936k free,    60716k buffers
Swap:   2097136k    total,     0k used,       2097136k free,    43424k cached


10251 www-data  15   0  467m 8100 4016 S    6  0.1   0:00.04 apache2
10262 www-data  15   0  467m 8092 4012 S    6  0.1   0:00.05 apache2
10360 www-data  15   0  468m 8296 4016 S    6  0.1   0:00.05 apache2
10428 www-data  15   0  468m 8272 3992 S    6  0.1   0:00.05 apache2
10241 www-data  15   0  467m 8256 4012 S    4  0.1   0:00.03 apache2
10259 www-data  15   0  467m 8092 4012 S    4  0.1   0:00.04 apache2
10274 www-data  15   0  467m 8056 4012 S    4  0.1   0:00.03 apache2
10291 www-data  15   0  468m 8292 4012 S    4  0.1   0:00.03 apache2
10293 www-data  15   0  468m 8292 4012 S    4  0.1   0:00.03 apache2
10308 www-data  15   0  468m 8296 4016 S    4  0.1   0:00.02 apache2
10317 www-data  15   0  468m 8292 4012 S    4  0.1   0:00.02 apache2
10320 www-data  15   0  468m 8292 4012 S    4  0.1   0:00.04 apache2
10325 www-data  15   0  468m 8292 4012 S    4  0.1   0:00.04 apache2
  

等等..有更多的apache2进程。

不到一分钟后,您可以在下面看到负载从 0.48 变为 2.17。如果我此时不停止 apache,负载会在几分钟或更短的时间内继续上升,直到机器死机。



top -    20:15:34 up 1:17,       2 users,  load average: 2.17, 0.62, 0.21
Tasks:   1850 total,  5 running, 1845 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,      2.1%sy,    0.0%ni, 96.4%id,  0.0%wa,  0.1%hi,  1.0%si,  0.0%st
Mem:     8179920k     total,     1938524k used,  6241396k free,    60860k buffers
Swap:    2097136k     total,     0k used,  2097136k free,    44196k cached
  

我们有一个防火墙,我们将已知允许访问我们网站的地址列入白名单。

非常欢迎任何关于问题可能是什么的想法。

Thanks!


您可能犯了一个错误,将 Apache 配置为使用远远超过所有内存的内存。这是一个很容易犯的错误。

我假设您正在使用 Prefork Apache 和进程内应用程序服务器(例如 PHP 或 mod_perl)。在此模型中,您最终将使用最大(MaxClients * 每个进程的应用程序的最大内存使用量)内存。如果你没有那么多,那么是时候减少其中一个、另一个或两者了。

在一般情况下,这意味着减少 MaxClients 到服务器有足够的内存来应对的程度。

如果您使用 Prefork 模型,则通常用于 MaxClients 的默认值(典型值为 150)不适合在普通计算机上运行进程内重量级应用程序服务器(大多数应用程序服务器不支持或不鼓励使用螺纹模型)。

但是,减少 MaxClients 最终会导致应用程序变得不可用,特别是如果您启用了 keepalive 并且 keepalive 超时太长。仅保持连接活动的进程(服务器状态中的状态 K)仍然使用大量 RAM,这可能是一个问题 - 尝试最小化保持活动超时,或完全关闭它。

您需要密切关注服务器状态(由 mod_status 提供)。

当然,只有在您了解后果的情况下,您才应该进行任何这些更改。三思而后行,更改配置一次。如果您有能力在类似规格的非生产机器上使用模拟负载测试更改,请这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我启动 apache 并继续杀死我的机器时,如何防止产生大量 apache 进程? 的相关文章

随机推荐