MaxKeepAliveRequests和MaxConnectionsPerChild之间的交互

时间:2015-05-06 18:25:51

标签: apache keep-alive amazon-elb

好的,这是在一系列非常繁忙的Apache 2.4服务器上,使用prefork MPM,支持AWS ELB。因为我们是ELB的幕后支持,所以不打算保持活力是愚蠢的,但是,我们希望孩子们能够定期回收。在打开Keepalive之前,MaxConnectionsPerChild设置处理了这个问题。但是对于Keepalive,基本上只有一个连接,因此MaxConnectionsPerChild会有些无效。 FWIW,服务器太忙,无法使用KeepAliveTimeout或者类似的东西 - 它们通常每秒可以获得数百个请求,每天24小时不间断,基本上没有空闲时间。

此外,几乎所有请求都是原子的,没有对图像,CSS等的后续请求。保持活动的真正原因是因为所有连接都来自单个源,负载均衡器。

所以这就是问题......我们认为为了偶尔回收子进程,我们可以使用这样的设置:

KeepAlive               On
KeepAliveTimeout        20
MaxKeepAliveRequests    1500
MaxConnectionsPerChild  4

同样,KeepAliveTimeout基本上没有效果。因此,我们的想法是,通过这种设置,持久连接将每1500个请求重置一次,然后在4次重置后,子项将被回收,即;每6000个请求回收子进程。然而,这导致子进程每分钟回收一次,这与流量水平不一致。作为测试,我们将设置更改为:

KeepAlive               On
KeepAliveTimeout        20
MaxKeepAliveRequests    6000
MaxConnectionsPerChild  4

预计儿童的寿命会增加四倍。但是,子进程现在每50秒循环一次到2分钟没有明显的模式。

我开始认为这两个设置没有按照我的想法进行交互。有什么见解吗?和/或“最佳实践”方法,以确保在这种情况下偶尔回收子进程?

1 个答案:

答案 0 :(得分:0)

您的KeepAlive似乎无效。

我可以在我的Apache上看到,当我将MaxKeepAliveRequests设置为1500到6000时,我的子生命周期增加了四倍(请求率不变)。

  • 你确定KeepAlive在apache上是活跃的吗? (默认情况下:是)。
  • 验证负载均衡器'keepalive'是否处于活动状态。
  • 您应验证负载均衡器是否向HTTP发送HTTP 1.1请求(仅在HTTP / 1.1时支持Keepalive连接)。 你可以在日志中看到它。