Apache - 保持活动还是不保持活动?

Apache - 保持活动还是不保持活动?

根据使用 Magento 企业版实现高性能电子商务的方法和最佳实践(需要注册)保持活动应该关闭(对于高流量站点)

当服务器用完可用连接时,mod_qos 还可以禁用保持活动支持。

所以问题是,我是否应该在低内存(360Mb)服务器中禁用/启用保持活动,保持活动有什么好处?

附加问题:根据 nestat,keep-alive 与大量 TIME_WAIT 连接有关系吗?

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

答案1

启用 keep-alive 的好处是,客户端将能够从您的服务器请求多个实体,而无需创建另一个 TCP 连接(包括往返在内的三次握手)。 问题是,如果您将 apache 中的连接限制设置为 300,如果有 300 个活动连接,则所有其他连接都必须等到前 300 个客户端完成和/或超时到期。

禁用保持活动状态将强制客户端为每个请求创建 1 个连接。当套接字在两端正确关闭时,它会进入 TIME_WAIT 状态,正如您所注意到的。这样做是为了确保该连接中使用的端口在可用之前不会从上一个连接接收数据(请参阅,但还有更多)。在我的 Linux 系统中,/proc/sys/net/ipv4/tcp_fin_timeout 设置为 60 秒。您可以尝试减少该时间,但不要减少太多。减少多少?这取决于您每秒获得多少个连接。对于 100-200req/s,不要费心更改默认值。

答案2

在低内存服务器上,无论何种规模,打开 keepalive 都会遇到问题。这是因为 apache 为每个连接创建一个线程或进程,默认情况下在 Linux 上分配 8 MB 的堆栈(可以通过 Apache 配置向下调整,具体程度取决于应用程序)。在 360 MB 的服务器上,如果每个客户端都保持至少一个甚至两个连接处于打开状态,那么这可能是一个问题。

事实上,这也是基于事件的 Web 服务器(如nginxlighttpd被创建——允许系统使用大量内存来处理数以万计的连接。

因此,我会在您的情况下关闭 keppalives,并忍受对客户端的性能影响。或者在 apache 前面使用类似 nginx 的东西来处理面向用户的连接,将请求代理到 Apache。这是一种非常常见的模型,实际上将 Apache 视为可能阻止磁盘或数据库访问等操作的“线程池”。

相关内容