【问题标题】:Apache using all 16 GB Memory, how to limit its processes and memory usage?Apache 使用全部 16 GB 内存,如何限制其进程和内存使用量?
【发布时间】:2018-03-22 16:43:20
【问题描述】:

我们在 16GB AWS 实例上,我发现它真的很慢。我跑的时候

ps -aux | grep apache

我可以看到大约 60 多个 apache 进程。

我跑的时候

watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"

它显示了 apache 使用的几乎所有内存。

我跑的时候

curl -L https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl

要查看如何优化 Apache,它建议我增加 MaxRequestWorkers 的数量,因此我将其设置为 550。我还将 MaxConnectionsPerChild 从 0(无限制)更改为 10000。

这是我的 /etc/apache2/mods-enabled/mpm_prefork.conf 文件

<IfModule mpm_prefork_module>
        StartServers              5
        MinSpareServers           5
        MaxSpareServers          10
        MaxRequestWorkers        550
        MaxConnectionsPerChild   10000
</IfModule>

你能告诉我我们如何优化 apache 内存使用,这样它就不会导致整个网站瘫痪吗?

【问题讨论】:

    标签: apache out-of-memory ubuntu-14.04


    【解决方案1】:

    我在 EC2 中的一个实例遇到了类似的问题,这就是我所做的和建议的:

    1. 如果您使用的是 prefork,请确保通过键入这两个命令来加载模块 apache2 -lsudo apache2 -M 如果您可以在这两个命令中的任何一个命令的结果中看到加载的 prefork 模块,则进入下一步。否则,请确保先加载它,否则您将更改配置。

    2. 运行此命令以查找每个 apache2 进程正在使用的平均内存 ps aux | grep 'apache2' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}' 调用该值 x

    3. 使用sudo service apache2 restart 重新启动您的Apache 服务器,并记下您有多少可用内存。我所做的是从空闲内存中减去一个额外的200MB-500MB 缓冲以供以后使用。调用该值y

    4. 将可用内存y 的值除以每个进程使用的内存量x,这就是MaxRequestWorkers = y/x 的值

    5. 至于MaxConnectionsPerChild 的值,你可以调整它直到你得到正确的配置。如果您将其设置得太大,那么该进程将在被杀死之前继续使用越来越多的内存。如果你把它设置得太小,那么进程会很快死掉,这会给你的系统带来开销。我通常把它放在400010000 之间。

    6. 其中一些步骤取自以下链接中已接受的答案:StackExchange: httpd memory usage,其中一种解决方案还建议在不需要时禁用某些模块。

    我建议您先执行第 1-5 步,看看是否能解决您的问题!

    祝你好运!

    【讨论】:

    • 对于“apache2 -l”,我只看到这些模块 - 在模块中编译:core.c mod_so.c mod_watchdog.c http_core.c mod_log_config.c mod_logio.c mod_version.c mod_unixd.c我没有看到 prefork,如何启用它?我很惊讶,因为它没有显示 prefork 和 worker mod?
    • 对我来说,我也没有看到它,但我看到它是使用sudo apache2 -M 加载的。如果您看不到它已加载,那么您可以使用 sudo a2enmod mpm_prefork 自动完成,或者您可以手动完成,这可能是一个漫长的过程,首先找到 .conf 文件然后取消注释该行加载 prefork 模块。祝你好运!
    猜你喜欢
    • 2023-04-05
    • 2011-06-18
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    相关资源
    最近更新 更多