为什么 apache2 进程使用 190MB 的虚拟内存?

为什么 apache2 进程使用 190MB 的虚拟内存?

我的 apache2 出了大问题。我使用的是 LAMP,Debian 6,64 位。

这是运行 24 小时后的屏幕,按 %MEM 排序:

您可以看到 apache2 的 VIRT 是 186mb。

这实在是太糟糕了。我该怎么办?

考虑到这个 Apache 服务只有几个虚拟主机,并且 PHP 页面不需要超过 3MB 的内存。

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

谢谢

答案1

这有那么严重吗?

您使用的 VIRT 字段是进程可以使用的内存总量。下一列更接近于它正在使用的内存量。即便如此,其中一些内存也会在进程之间共享。如果您要进行 Linux 管理,我建议您阅读 Linux 如何管理虚拟内存。

查看其他统计数据,您仍然有 1Gb 的备用 RAM,因此该盒子甚至没有尝试填充其磁盘缓存,因此看起来有足够的备用 RAM。

不过 Mahnsc 是正确的,删除​​未使用的模块将有助于内存和安全。

尽管如此,它看起来确实有点大。它们变大了吗?重启是否会重置为较小的内存使用量?如果它在增长,那么这可能是一个问题,但如果它基本是静态的,那么可能没问题。

答案2

卸载您不使用或打算使用的任何模块。如果您使用的是 php 并且不需要 mod_proxy 或 mod_jk 支持,请卸载它们。这应该有助于减少每个子进程的占用空间。如果您没有通过 apache 进行任何类型的身份验证,您也可以卸载大多数 mod_auth_* 和 mod_authn_* 模块。

答案3

如果您想测量 apache 的实际内存占用量,那么可以将“free”的输出与 httpd 进程的数量进行比较。

正如 mahnsc 所说 - 您应该从 httpd 中删除不需要的东西(您也可以删除符号 - 但节省的并不多)。

只有几个虚拟主机和 PHP 页面

也许 - 这取决于代码实际在做什么。您可以考虑切换到 fastCGI(它对内存使用没有帮助 - 但它可以让您查看问题出在 apache 还是 PHP 上)。

无论如何,几乎没有证据表明它确实影响性能。

答案4

服务器限制太大。根据您的应用程序,应该是 10 倍 CPU 核心数。使用 JMetter 针对高负载期间预期的流量运行负载测试。然后ServerLimit相应地设置。我会从 2 * #CPU 核心开始,然后线性增加,直到负载测试期间的性能开始下降。

相关内容