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

所以我有一个带宽非常高的服务器的客户端。 它的服务在需求方面非常轻便 – 静态JPEG和文本。

服务器规格:

  • 双核四核L5520 2.26gHz(3.2 Turbo&HT)8MBcaching
  • 72GB的Ram
  • 2个300GB SSD(1个专用于/ usr以跟上日志logging)
  • 在一个非常有信誉的数据中心100Mbps(无计量)端口

我目前得到的Apacheconfiguration如下:

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

上周我看到每秒钟有2000-3000个apache访问,没有问题。 这被翻译成80-90Mbps的速度上升,负载在1左右,峰值在5左右,而当apache重新启动并重新生成所有进程时,会出现30-50的瞬时极值峰值。 内存使用量约为40GB。 stream量增加了,现在我看到每秒有3000-4000个apache访问,http不稳定。 尽pipeapache偶尔会重新启动,但我正在运行apache并没有http连接,并且有闲置的工作人员和空闲插槽。 当稳定和频繁扣球时,负荷是2左右,这无疑是我的连接问题,但我不知道为什么。 内存使用量是50-60GB。 吞吐量约为130Mbps。 (我不确定当我的软件包是100Mbps的时候,我怎么会超过100Mbps,但是我现在有了一张与DC有关的票据来询问他们是否因为我的使用而丢弃了数据包,但是,解释我的稳定性问题,除非艾克正在下降,离开联系超时…也许…不知道…从来没有想过这个思想背后的理论,直到现在)

我正在寻找意见,如果我已经达到了可以处理的apache的操作,或者是有一些其他的系统限制,我可能超过。

有人告诉我LiteSpeed是解决scheme,但是我没有经验,而且我的客户听到不好的东西,所以也有意见。

谢谢大家!

首先,除了Apache,nginx或LightSpeed之外 – 如果您运行2000-3000个请求/秒的服务器,现在可以开始考虑双服务器和负载均衡了。 根据你所提供的服务,你可以很容易地从这些服务器中获得更多的信息,但是在这些服务器上,你提供了一些重要的(或者至less是高stream量的)服务,所以你需要冗余,除了处理一时加载尖峰。
开始认真考虑负载均衡基础设施(这里有很多关于HAProxy等的问题/答案,Google也可以帮助你)。


也就是说,我不相信你已经达到了Apache的操作限制。
您当然可以考虑其他高性能Web服务器(nginx非常stream行),或者您可以考虑调整您的Apacheconfiguration以获得更好的性能。

根据我在你的问题中看到的一些Apachebuild议:

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

  1. MaxRequestsPerChild实际上仅用于包含资源泄漏。
    100(你现在的价值)绝对是疯狂的。 你正在搅动杀死性能的进程。
    0(永远不要杀死一个孩子)当然是可行的,如果你所服务的是静态资源。
    万万(默认值)在几乎所有情况下都是好的。 50000(五万)是我用于纯静态HTML网站。

  2. 可以调整StartServersMinSpareServersMaxSpareServers
    我通常将StartServersMinSpareServers设置为相同的值。
    如果有一个特定的最小数量的备用服务器要保持,那就是你应该开始的数字。 一个很好的价值是你的低水位同时活动连接。
    MaxSpareServers应设置为同时活动连接的高水位标记的75-80%。

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

  4. 使用平稳重启
    你说你在Apache重新启动的时候在你的负载中看到了“瞬间的极端高峰”。
    这告诉我你可能没有使用优雅的重新启动。
    无论是什么导致Apache重新启动,它发送SIGUSR1到Apache而不是SIGHUP (或天堂禁止,实际上停止和启动整个服务器)。 与定期重新启动完全停止/启动相比,这对系统的滥用和干扰要小得多。

  5. 考虑其他MPM
    如果你在Unix系统上,你几乎可以肯定地使用prefork MPM 。
    考虑工人 MPM来代替。
    调教工人MPM是有点不同

  6. 花一些caching
    Apache有caching模块 ,可以用来保存经常访问的数据在RAM中。 这避免了往往访问磁盘(或至less文件系统层)的频繁访问的数据。
    configuration内存支持的caching可以为相对较less的内存提供相当大的性能提升。