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

jci*_*sio 5 optimization http debian tcp

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

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

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

jfg*_*956 5

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

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

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

  • 由于延迟,下载一个 16K 的文件将需要 2.4 秒(SYN-SYN/ACK 为 600 毫秒,请求为 300 m,前 3 个数据包为 600 毫秒,接下来的 6 个数据包为 600 毫秒,以及最后一个数据包为 300 毫秒)。如果您能够让操作系统在 2 次握手后发送所有数据包并避免慢启动,则可以将其缩短到 1.2 秒。当然,如果您还避免握手(Keep-Alive),您可以减少到 600 毫秒,但最后一个优化是在 Apache 中进行的调整,您需要客户端帮助,而不是请求者要求的 TCP 堆栈中的帮助。 (2认同)