限制Apache 2的内存使用量


9

我正在从运行Debian PPC Squeeze 2.6.30的古老Blue&White G3 / 300运行一个业余网络服务器。重新启动后的一段时间性能尚可,但是最终却越来越陷入困境。目前,正常运行时间为76天,而造成这种情况的主要原因似乎是10多个apache2进程的内存使用情况。

我想我需要为较低的值StartServersMinSpareServers和/或MaxSpareServers,但我不知道哪一个调整,并有三个部分的每个取决于哪个MPM模块在使用。

我如何确定我需要更改以下哪些部分,以及鉴于该包装盒具有448 MB的物理内存(64、128和256个存储棒分别怪异的升级历史记录),有什么合理的值?

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

我的apache2.conf中没有其他任何StartServer实例,但是这些mpm模块都没有出现在mods-available或中mods-enabled。有想法吗?

谢谢!


我假设您的设备内存不足(并且糟糕的性能来自大量交换)。如果您不交换信息,我将为您提供更多详细信息:-)
voretaq7'2

Answers:


6

如今,Web服务器的400MB内存已不多了-您可能需要考虑更换盒子:)

就是说,如果您的内存使用量激增,那么您可能在某处内存泄漏-为了快速测试一下现在httpd进程的大小,然后停止/启动Apache并查看它们是否小很多。如果他们看着它们几天,看看它们是否长大。

如果这是内存泄漏,那么真正的解决方案是查找并修复内存泄漏,但是由于这通常很麻烦,因此您还可以调整MaxRequestsPerChild为0(无限制)以外的值。当他们为固定数量的请求提供服务时,这将杀死Apache工人(迫使他们在此过程中放弃泄漏的内存)。

从较大的值(数千个左右)开始,一直到数百个。如果每个孩子的请求数少于100个,那么您的内存泄漏就足够大,可以保证对其进行修复,因为不断淘汰和重新生成Apache工作者的性能损失将是巨大的。


回复:调整哪个mpm,答案几乎可以肯定prefork
您可以运行httpd -V并寻找能Server MPM:肯定告诉您的线。


1
-V给了我所需的前叉信息(尽管在我的情况下是apache2 -V)。谢谢!
UltraNurd 2010年

似乎已经完成了trick俩。我认为问题在于我的物理内存不足,无法进行交换,因为子服务器太多了(每个子服务器占用约80 MB)。是的,我知道服务器是旧的。但这几乎不处理任何请求:oD。
UltraNurd 2010年

1
如果您不处理很多请求,也可以按照您在原始帖子中提到的那样减少Start&Spare服务器的数量(在开发系统上,我将它们设置为2到5之间,以减少RAM使用量)
voretaq7

我最终将最小和最大备用磁盘数从5和10降到了3和6,这似乎留下了足够的RAM剩余空间来防止事物交换。谢谢!
UltraNurd 2010年

1

要确定使用apache进程的内存,您需要调整MaxClients。

常用的经验法则是:(最大所需内存)/(1个Apache进程的内存使用量)=#个最大客户端

最后,您还需要将自己调整为MaxSpareServers <= Max Clients

一个进程的内存使用量在很大程度上取决于您所加载的模块(php等),因此您可能希望将Max Clients设置得低一些。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.