Apache 在高流量服务器上的稳定性

Apache 在高流量服务器上的稳定性

我有一个拥有高带宽服务器的客户。其服务需求量很小 - 静态 jpeg 和文本。

服务器规格:

  • 双四核 L5520 2.26gHz(3.2 Turbo 和 HT)8MB 缓存
  • 72GB 内存
  • 2 个 300GB SSD(其中 1 个专用于 /usr,用于记录日志)
  • 一家声誉良好的数据中心提供 100Mbps(不计费)端口

我目前的 apache 配置如下:

  • 启动服务器 512
  • 最少备用服务器 256
  • 最大备用服务 512
  • 服务器限制 7500
  • 最大客户端数 7500
  • 每个孩子的最大请求数 100
  • 保持活动超时 5
  • 最大 Keep Alive 请求数 768
  • 超时 30

上周,我每秒看到大约 2000-3000 次 apache 访问,没有任何问题。这相当于 80-90Mbps 的上行速度和大约 1 的负载,峰值大约为 5,当 apache 重新启动并且所有进程重新生成时,瞬间极端峰值为 30-50。内存使用量约为 40GB。流量增加了,我现在每秒看到 3000-4000 次 apache 访问,并且 http 不稳定。虽然 apache 偶尔会重新启动,但当 apache 运行时,我会遇到没有 http 连接的时期,并且有空闲的工作程序和开放的插槽。稳定时负载约为 2,经常出现峰值,这无疑是我的连接问题,但我不知道为什么。RAM 使用量为 50-60GB。吞吐量约为 130Mbps。 (我不确定当我的套餐是 100Mbps 时我如何获得超过 100Mbps 的速度,但是我现在已经向 DC 提交了一张票,询问他们是否可能因为我的使用而丢弃数据包,但这并不能解释我的稳定性问题,除非 ack 丢失并导致连接超时...也许...不确定...到现在为止从未想过这个想法背后的理论)

我正在寻找意见,关于我是否已经达到 Apache 可以处理的最大值,或者是否存在我可能超出的其他系统限制。

有人告诉我 LiteSpeed 是解决方案,但我没有使用过,而且我的客户也听到过不好的事情,所以我也非常感谢他们的意见。

谢谢大家!

答案1

首先,除了 Apache、nginx 或 LightSpeed 之外,如果您运行的服务器每秒处理 2000-3000 个请求,那么是时候开始考虑双服务器和负载平衡了。根据您提供的内容,您可以容易地充分利用这些服务器,但以这样的速率,您正在为一些重要的东西提供服务(或至少是高流量),因此除了处理瞬时负载峰值的能力之外,您还需要冗余。
开始认真考虑负载平衡基础设施(这里有很多关于 HAProxy 等的问题/答案,Google 也可以为您提供帮助)。


话虽如此,我不认为您已经达到了 Apache 的运行极限。
您当然可以考虑其他高性能 Web 服务器(nginx 非常流行),或者您可以考虑调整 Apache 配置以获得更好的性能。

根据我从您的问题中看到的内容,Apache 提出了一些建议:

在做任何其他事情之前,请阅读Apache 性能调优文档

  1. MaxRequestsPerChild实际上仅对控制资源泄漏有用。
    100(您当前的值)绝对是疯了。您正在搅动进程,这会降低性能。
    如果您提供的只是静态资源,那么 0(永不杀死子进程)肯定是可行的。10000
    (默认值为一万)在几乎所有情况下都适用。50000(五万)是我在纯静态 HTML 站点中使用的值。

  2. StartServersMinSpareServers并可MaxSpareServers进行调整。
    我通常将StartServers和设置MinSpareServers为相同的值。
    如果您希望保留的备用服务器数量有特定的最小值,那么您应该从这个数字开始。一个合适的值是您同时活动连接的低水位线。
    MaxSpareServers应设置为同时活动连接高水位线的 75-80%。

  3. ServerLimitMaxClients有可能会增加。
    如果您有大量可用 RAM 和 CPU,请增加这些数字。
    如果您的运行接近资源饱和,请保持原样。

  4. 使用优雅重启
    您说在 Apache 重新启动时,负载会出现“瞬间极端峰值”。
    这说明您可能没有使用优雅重新启动。
    无论是什么原因导致 Apache 重新启动,都应将其发送SIGUSR1给 Apache,而不是SIGHUP(或者天哪,实际上停止并启动整个服务器)。与完全停止/启动的常规重新启动相比,这远没有那么严重和破坏系统。

  5. 考虑其他 MPM
    您几乎肯定会使用prefork多层印刷机如果你使用的是 Unix 系统。
    考虑一下工人MPM。Worker
    MPM 的调优略有不同

  6. 花一些缓存
    Apache 有缓存模块可用于将频繁访问的数据保存在 RAM 中。这样可以避免频繁访问数据时往返磁盘(或至少文件系统层)。
    配置记忆支持缓存可以用相对较少的内存带来很大的性能提升。

相关内容