Apache – 保持活着还是不活跃?

根据与Magento企业版的高性能电子商务的方法和最佳实践 (需要注册)保持活着应该closures(高stream量的网站)

mod_qos还可以在服务器没有空闲连接时禁用保持活动支持。

所以问题是,如果我在低(360Mb)内存服务器上保持活动状态为禁用/启用状态,保持活动状态还是有好处的吗?

侧面的问题:根据nestat有很多TIME_WAIT连接有什么关系吗?

是否TIME_WAIT连接浪费服务器资源,我应该尝试(如何?),以保持其数量低?

保持活力的好处是,客户端可以从服务器请求多个实体,而无需创build另一个TCP连接(包括往返的三次握手)。 这个问题就是,如果你将apache中的连接限制设置为300,那么如果有300个活动连接,所有其他连接将不得不等待,直到前300个客户端完成和/或超时过期。

禁用保持活动将强制客户端为每个请求创build1个连接。 正如您已经注意到的那样,当套接字在两端正确closures时,它将进入TIME_WAIT状态。 这种情况发生的目的是确保在该连接中使用的端口在可用之前不会从以前的连接接收数据(请参阅此处,但还有更多内容)。 在我的linux系统中,/ proc / sys / net / ipv4 / tcp_fin_timeout被设置为60秒。 你可以尝试减less,但不要太低。 多远? 这取决于你每秒有多less个连接。 对于100-200req / s,不要更改默认值。

在内存不足的服务器上,您将遇到以任何比例开启Keepalive的问题。 这是因为apache为每个连接创build一个线程或进程,默认情况下在Linux上分配8 MB堆栈(可以通过Apacheconfiguration向下调整,取决于应用程序的程度)。 在您的360 MB服务器上,如果每个客户端都保持打开至less一个,甚至可能有两个连接,则这可能是一个问题。

事实上,这就是创build基于事件的Web服务器(如nginx和lighttpd)的主要原因 – 允许系统使用相当数量的内存处理数以万计的连接。

所以,我会在你的情况下closureskeppalives,并对客户的性能产生影响。 或者在apache之前使用类似nginx的方式来处理面向用户的连接,将请求代理到Apache。 这是一个非常常见的模式,有效地将Apache视为“线程池”,以便可能阻塞磁盘或数据库访问等操作。