如何减少已提交的 Apache 内存?

如何减少已提交的 Apache 内存?

10 月 24 日更新

按照@David Schwartz 的要求转储 ps axl :http://textuploader.com/?p=6&id=z8riS


在繁忙时段,我们会达到 Apache 的最大连接数(当前设置为 256)。我想增加最大连接数设置,但有人建议不要这样做,因为在这些时段我们的内存被过度使用。但是,实际的 RAM 使用量似乎远未达到承诺值。

如何计算 Apache 进程的承诺值?我该如何减少这个值?

我已经尝试将 PHP memory_limit 设置为较低的值,但这对我的 munin 图中提交的值没有影响:

在此处输入图片描述

服务器规格:

  • 戴尔 PowerEdge 2950 MKIII
  • 8 GB 内存
  • 单插槽四核 Intel Xeon 5320 LV 1.86GHz
  • 2 个 146GB SFF 10K RPM 硬盘(RAID 1)
  • Apache/2.2.15(Unix)
  • PHP 5.3.3

该服务器专用于 Apache(MySQL 在另一个盒子上)。

答案1

我会尝试将 PHP 脚本和静态文件的服务分开。

您可以使用 非常高效地提供静态文件,worker MPM甚至使用event MPMavailable for效果更好httpd 2.4+。但您不能使用此 MPM 来提供 PHP 脚本,因为 PHP 不是线程安全的。

对于 PHP,您可以运行单独的 httpd 实例(我在我的服务器上运行它Listen 127.0.0.2:488)并将主服务器配置为反向代理:

ProxyPreserveHost On
DocumentRoot /var/www/html
RewriteEngine On
RewriteCond /var/www/html%{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule ^/(.*) http://127.0.0.2:488/$1 [P,L]

有了它mod_remoteip(再次 - 从 httpd 2.4 开始可用),它对于 PHP 脚本来说将真正透明。

或者使用例如php-fpm

这样,对静态文件、HTTP 持久连接等的请求将使用一小部分 RAM。

相关内容