iCy*_*org 2 apache out-of-memory ubuntu-14.04
我们在 16GB AWS 实例上,我发现它真的很慢。当我跑
ps -aux | grep apache
Run Code Online (Sandbox Code Playgroud)
我可以看到大约 60 多个 apache 进程。
当我跑
watch -n 1 "echo -n 'Apache Processes: ' && ps -C apache2 --no-headers | wc -l && free -m"
Run Code Online (Sandbox Code Playgroud)
它显示了 apache 使用的几乎所有内存。
当我跑
curl -L https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl
Run Code Online (Sandbox Code Playgroud)
要查看如何优化 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>
Run Code Online (Sandbox Code Playgroud)
你能告诉我我们如何优化 apache 内存使用,这样它就不会导致整个站点瘫痪吗?
小智 8
我在 EC2 中的一个实例遇到了类似的问题,这就是我所做的并建议:
如果您使用的是 prefork,请确保通过键入这两个命令来加载模块
apache2 -l,sudo apache2 -M
如果您可以在这两个命令中的任何一个的结果中看到加载了 prefork 模块,则进入下一步。否则,请确保先加载它,否则您将毫无意义地更改配置。
运行此命令以查找每个 apache2 进程使用的平均内存ps aux | grep 'apache2' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'调用该值x
使用重新启动您的 apache 服务器sudo service apache2 restart并记下您有多少可用内存。我所做的是200MB-500MB从空闲内存中减去一个额外的缓冲以备后用。调用那个值y
将空闲内存的值除以y每个进程使用的内存量,x这就是MaxRequestWorkers = y/x
至于MaxConnectionsPerChildthen的值,您可以对其进行调整,直到获得正确的配置。如果它太大,那么该进程将在被杀死之前继续使用越来越多的内存。如果它太小,那么进程会死得太快,这会给您的系统带来开销。我通常把它放在4000和之间10000。
其中一些步骤是从以下链接中接受的答案中获取的:StackExchange:httpd 内存使用,其中一种解决方案还建议在不需要某些模块时禁用它们。
我建议您先执行步骤 1-5,看看是否能解决您的问题!
祝你好运!
| 归档时间: |
|
| 查看次数: |
16620 次 |
| 最近记录: |