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

Ces*_*sar 6 keepalive apache-2.2

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

如果服务器没有可用连接,mod_qos 还可以禁用保持活动支持。

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

附带问题:根据 nestat,保持活动状态与拥有大量 TIME_WAIT 连接有什么关系?

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

rma*_*ter 7

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

事实上,这是创建nginxlighttpd等基于事件的 Web 服务器的主要原因- 允许系统使用合理的内存量处理数万个连接。

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


Gon*_*alo 5

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

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