限制 Apache 2 内存使用量

限制 Apache 2 内存使用量

我正在一台古老的 Blue & White G3/300 上运行一个业余网络服务器,该服务器运行 Debian PPC Squeeze 2.6.30。重启后,性能暂时还不错,但最终变得越来越慢。目前,它已经正常运行了 76 天,主要原因似乎是 10 多个 apache2 进程的内存使用量。

StartServers我想我需要降低、MinSpareServers和/或的值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 中没有任何其他 StartServers 实例,但是这些 mpm 模块均未出现在mods-available或中mods-enabled。有什么想法吗?

谢谢!

答案1

如今,400MB 对于 Web 服务器来说并不算多——您可能需要考虑更换服务器:)

也就是说,如果您的内存使用量激增,则可能是某个地方存在内存泄漏——进行快速测试,查看当前 httpd 进程的大小,然后停止/启动 Apache,看看它们是否小了很多。如果是,观察几天,看看它们是否会增长。

如果是内存泄漏真实的解决方案是找到并修复内存泄漏,但由于这通常很麻烦,您也可以调整MaxRequestsPerChild为 0(无限制)以外的值。当 Apache 工作进程处理了固定数量的请求后,这将终止它们(迫使它们在进程中放弃泄漏的内存)。

从较大的值开始(几千左右),然后逐渐减小到几百。如果每个子进程的请求数低于 100,则内存泄漏就足够大了,需要确实修复了它因为不断杀死并重新生成 Apache 工作者会对性能造成巨大影响。


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

答案2

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

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

最后你还需要调整你的最大备用服务器数<=最大客戶端

一个进程的内存使用量很大程度上取决于您加载的模块(php 等等),因此您可能需要将最大客户端数量设置得稍微低一些。

相关内容