如何为 HTTP 服务器优化 TCP 堆栈?

如何为 HTTP 服务器优化 TCP 堆栈?

我有一个 HTTP 服务器,它只提供两种页面:大约 10 KB 和大约 16 KB(均经过压缩,其他文件来自 CDN)。由于延迟相当高(ping需要超过 300 毫秒),我想优化 TCP 堆栈,以便客户端尽快收到整个页面。

因此,我有一个双重问题:

  • 我必须更改哪个参数(TCP 窗口的哪个值)?
  • 如何进行更改(一个 Debian 盒子,仅供参考,在 HTTP 服务器之前有一个 Varnish)。

答案1

如果你被困在这种高延迟中,我想你想做的一件事就是避免TCP 慢启动默认情况下,TCP 堆栈将在发送前 3 个数据包后等待 ACK,在您的情况下,这意味着由于往返时间而延迟 600 毫秒。它已被废弃这里。 根据,您无法在 Linux 中轻松更改此数字,除非迁移到内核版本 2.6.33。

也许您可以使用更大的正确参数值重新编译您的内核,或者转到允许您在此参数上使用更大值的操作系统(我认为 Solaris 可以在这里进行调整)。

在应用程序端,确保启用 HTTP Keep-Alive,以避免每次 HTTP 请求时都出现慢启动。

答案2

我认为,在内核中更改特定的 tcp/ip 和其他网络相关设置并没有什么用,这样就无法大幅降低延迟,即将延迟从 300 毫秒降低到 100 毫秒以下。除非一开始配置不正确导致这种延迟,或者服务器过于繁忙(或硬件问题)。

您需要提供更多数据,例如往返于您的服务器的跟踪路由以及往返于您的服务器的 ping 结果以及任何其他可能显示此类延迟的可能原因的数据。

相关内容