如何限制 Apache 2.4 使用的总内存量(不是每个进程的内存量)

如何限制 Apache 2.4 使用的总内存量(不是每个进程的内存量)

有没有办法限制 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

我做了一些初步测试,它成功了。让我们看看明天在正常工作负荷下它会表现如何。

相关内容