有没有办法限制 Apache 使用的总内存(而不是每个进程的内存)?
我有一个运行 PHP 和 MySQL 的 Web 服务器。我需要将 PHP 内存限制为 1G,否则某些脚本会失败(dompdf/phpexcel)。问题是有时人们会同时运行这些脚本。Apache 占用几 GB 的内存,而 MySQL 则因内存不足而死机。
我想将其限制为 4 GB,这样如果同时调用 5 个以上的脚本,它们就无法运行。
我看了一下 RLimitMEM,但它是每个进程的。
我在 Centos 6 上使用带有事件 MPM 的 Apache 2.4。
答案1
当我在寻找虚拟化解决方案时,我找到了我正在寻找的东西:cgroups。它完全符合我的要求:限制所有 Apache 进程的总内存量。
要在 Centos 6 上安装它:
yum install -y libcgroup
编辑 /etc/cgconfig.conf 并添加:
group http {
memory {
memory.limit_in_bytes = 4G;
}
}
启动 cgroups 服务:
service cgconfig start
您也可以使用 chkconfig 来自动启动它。
最后在 cgroup 下启动 Apache:
cgexec -g memory:/http /usr/local/apache2/bin/apachectl start
我做了一些初步测试,它成功了。让我们看看明天在正常工作负荷下它会表现如何。