我有一个拥有高带宽服务器的客户。其服务需求量很小 - 静态 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 性能调优文档。
MaxRequestsPerChild
实际上仅对控制资源泄漏有用。
100(您当前的值)绝对是疯了。您正在搅动进程,这会降低性能。
如果您提供的只是静态资源,那么 0(永不杀死子进程)肯定是可行的。10000
(默认值为一万)在几乎所有情况下都适用。50000(五万)是我在纯静态 HTML 站点中使用的值。StartServers
,MinSpareServers
并可MaxSpareServers
进行调整。
我通常将StartServers
和设置MinSpareServers
为相同的值。
如果您希望保留的备用服务器数量有特定的最小值,那么您应该从这个数字开始。一个合适的值是您同时活动连接的低水位线。
MaxSpareServers
应设置为同时活动连接高水位线的 75-80%。ServerLimit
并MaxClients
有可能会增加。
如果您有大量可用 RAM 和 CPU,请增加这些数字。
如果您的运行接近资源饱和,请保持原样。使用优雅重启
您说在 Apache 重新启动时,负载会出现“瞬间极端峰值”。
这说明您可能没有使用优雅重新启动。
无论是什么原因导致 Apache 重新启动,都应将其发送SIGUSR1
给 Apache,而不是SIGHUP
(或者天哪,实际上停止并启动整个服务器)。与完全停止/启动的常规重新启动相比,这远没有那么严重和破坏系统。考虑其他 MPM
您几乎肯定会使用prefork
多层印刷机如果你使用的是 Unix 系统。
考虑一下工人MPM。Worker
MPM 的调优略有不同花一些缓存
Apache 有缓存模块可用于将频繁访问的数据保存在 RAM 中。这样可以避免频繁访问数据时往返磁盘(或至少文件系统层)。
配置记忆支持缓存可以用相对较少的内存带来很大的性能提升。