如何使 Apache 服务器更加内存密集?

如何使 Apache 服务器更加内存密集?

我已经安装了 Apache 2.2,它运行起来非常顺畅。问题是,当负载很高或大量用户同时访问同一个 php 文件时,系统有时会变慢。

查看 Splunk 中的服务器性能日志时,我注意到 Apache 非常高效地使用 CPU,并且每次出现峰值时都会创建单独的线程,并以非常大胆的方式处理 CPU 消耗。

尽管如此,这台特定服务器的可用内存比 CPU 能力要多,我想知道是否有办法让 Apache 在处理不同任务时更多地依赖 RAM 而不是 CPU。目前,这似乎是在特定设置中提高 Apache 性能的最佳选择。

我们的服务器每个有 4 个 CPU 核心(2.2 GHz)和 8GB RAM。

当发生负载时,我们通常只看到使用了 700MB 的 RAM,但 Apache 消耗了所有 CPU 的 80-90%。通过增加 Apache 处理的内存“限制”,我们可以推高用户限制,这种假设合乎逻辑吗?

改变 Apache 使其以这种方式工作需要哪些步骤?

答案1

您是否安装了 PHP 操作码缓存?例如 php-apc 或 xcache?

通常的建议:

  • 减少默认加载的不需要的 Apache 模块
  • 尝试使用不同的设置暂停活着最大KeepAliveRequests保持活力
  • 绘制一些图表以便更好地分析您的系统(使用 cacti/munin/等)
  • 发布输出“vmstat 1“在高峰时段

答案2

查看使用 apaches mod_expires 和 deflate。

答案3

每次出现 [cpu] 峰值时创建单独的线程

那么,这是线程服务器,而不是预分叉服务器吗?

您认为峰值可能是生成更多进程的结果吗?如果是这样,那么我建议运行更多进程(但线程数/子进程数相同)。还要确保 maxrequestsperchild 的值较高(而不是 0)。

当然,您希望确保有更多空闲的 httpds 在运行。如何做到这一点取决于它是预分叉还是线程 apache。

如果您提供当前的核心设置以及如何配置 PHP 以及在什么操作系统上运行的详细信息,那将会很有帮助。

正如其他人所说,启用压缩。mod_deflate 仅适用于静态内容 - 对于 PHP,您需要在 ini 文件中添加 zlib.output_compression = On。虽然对此的简单分析表明它增加了 CPU 的工作量,但实际上这意味着服务器被释放了(因此调度的频率更低)。

首选 php 应该作为 mod_php 运行,否则,通过 fastCGI 运行 - 如果它作为 CGI 运行,那么您期望什么?同样,操作码缓存会有所帮助。

相关内容