低内存安装的 Apache 脚本

低内存安装的 Apache 脚本

我一直在努力改善 Centos 5.5 VDS 的内存使用情况,现在它有 512MB 的 RAM。我能够使用一个优化脚本来大大改善 MySQL 配置,但在降低 Apache 的内存使用率方面遇到了一些麻烦。我遇到的问题部分是各种网站、论坛等上提供的建议相互矛盾。作为一台生产服务器,我在测试机上采用的正常修改和测试周期会有点太混乱。

更让我困惑的是,我有一台配置尽可能接近 VDS 克隆的开发机,它使用更少的 RAM 和完全相同的 Apache 配置。虽然显然很难施加相同的负载,但在白天或晚上的安静时间比较两者时,我得到的结果是相当接近的。

是否有适用于 Apache 的调整脚本(类似于 MySQL 的脚本),可以通过分析服务器运行时发生的情况来帮助优化配置?

编辑:

要么是我说得不清楚,要么是人们没有阅读这个问题,所以我来澄清一下。

我不是要求这里的任何人提出建议或建议替代方案。我只是想问一下,是否有人知道一个脚本,可以分析服务器上发生的事情,并根据这些信息对 Apache 配置提出建议。

答案1

我不知道 Apache 有任何这样的脚本,可能是因为与 MySQL 相比,只有少数几个因素会影响 Apache 的内存使用情况:

  1. MaxClients:客户端越多,使用的内存越多。
  2. 模块:同样,安装的模块/扩展越多,所需的内存就越多。
  3. 动态脚本:运行动态脚本(如 PHP)可能会增加内存使用量,具体取决于您的 Apache 设置。例如,假设您有 10 个小型 PHP 文件和一个很少使用的大型/内存密集型文件。最终,所有 Apache 客户端都将运行这个大型 PHP 脚本并使用更多内存。
  4. 编译时间:我没有对 Apache 编译时间设置进行过多的尝试,但如果发现它可以节省一些内存,我也不会感到惊讶。

下面列出了您可以尝试的一些具体方法。如果可能,请先尝试衡量效果并在开发平台上进行测试,或者在生产站点上逐步实施任何更改。

  1. 尽量保持MaxClients低位。在流量较少的网站上,你很可能可以将数字控制在 10 以下。你也可以保留其他相关设置喜欢MaxSpareServers低。
  2. 比较 Apache 的 prefork 模式和 worker 模式,看看内存使用情况是否存在显著差异。
  3. 删除所有你实际上不使用的模块/扩展。这可能比听起来更难,因为确定你正在使用哪些模块/扩展并不总是那么容易。
  4. 使用较低的值 (100-1000)MaxRequestsPerChild如果您正在使用任何动态脚本或看到 Apache 实例的内存使用量随时间推移而缓慢增加。这可防止内存匮乏或泄漏脚本占用过多内存。
  5. 仅在您确实需要或过去有丰富的 Apache 编译经验时才考虑编译时内存优化。我个人建议在执行此步骤之前先研究替代服务器。

答案2

为什么不考虑使用内存占用小的 Web 服务器:NGINX?它因内存占用低而广受好评,推荐用于在 VPS 上运行的站点。

无论如何,现在 400MB 对于 Web 服务器来说不算多,你可能要考虑更换服务器了!Apache2 占用大量内存。必须对其进行配置,而配置选项令人困惑。

编辑你的 apache 配置,通常在 /etc/apache2/apache2.conf 中

在 mpm_prefork_module 设置中,将 StartServers 设置为 1,将 MinSpares 设置为 1 或 0,将 MaxSpares 设置为 3 之类的值。例如,运行 10 个进程将使 512mb 的服务器超载(Apache2 的默认最小值为 256mb,但您对此无能为力!)。为了减少服务器上的占用空间/少量流量,您可以尝试以下操作:

<IfModule mpm_prefork_module>
     StartServers          2
     MinSpareServers       2
     MaxSpareServers       3
     MaxClients          150
     MaxRequestsPerChild   500
</IfModule>

在测试流量负载时更改上述设置,以查看新设置是否可以处理。

您可以将 Apache 的 KeepAlive 调低为较低的值(在我的情况下为 2~5),这样可以减少等待空闲客户端连接的服务器进程数,因为这些客户端可能不会再请求任何内容。

 KeepAlive On
 KeepAliveTimeout 2
 MaxKeepAliveRequests 80

减少服务器在请求失败之前等待的时间:

 Timeout 45

您还可以阅读以下文章:http://httpd.apache.org/docs/2.0/misc/perf-tuning.html

但同样,这种设置适用于流量非常小的情况NGINX 可以使用相同的硬件完成更多任务。

相关内容