调整 Amazon Linux 的 TCP 握手,接收 200-300KB 响应,然后关闭连接

调整 Amazon Linux 的 TCP 握手,接收 200-300KB 响应,然后关闭连接

我有一个应用程序,它定期创建新的 TCP 连接,发出请求,然后在关闭连接之前获得大约 300KB 的响应。假设我无法重新设计此工作负载,并且我这边和连接另一边之间的延迟约为 5ms,我该如何优化性能?

从数据包捕获中我可以看到:

  • SYN-SYNACK-ACK 握手(约 15 毫秒)
  • 我发送了一个小请求(<1KB),他们确认了它(~10ms)
  • 他们开始发送 300KB 的响应
  • 它们用约 30K 字节填充 TCP 窗口(第一个字节约 5 毫秒,但之后我仅用 0.05 毫秒便可获得全部 30K 字节)
  • 它们在等待我的 ACK 到达时暂停,然后填充新窗口(现在约为 50K,因为我在 ACK 中做了广告)
  • 它们填满了那个窗口并暂停......
  • ...

因此,为了解决这种情况,我正在考虑net.ipv4.tcp_rmem从默认值进行更新:

net.ipv4.tcp_rmem = 4096        87380   6291456

类似于:

net.ipv4.tcp_rmem = 307200      307200   6291456

但我真的不确定这会对系统产生什么影响。假设我有许多 GB 的 RAM 处于稳定状态。这样的改变有什么缺点?如果我了解 TCP 的内存使用情况,这将导致我在第一次确认时通告一个 300KB 的窗口,并且假设对方准备一次发送 300KB,他们就会这样做。

答案1

我认为 TCP 慢启动在启动时仍会限制您的接收窗口。

是否可以更改应用程序以重用 TCP 连接?那将是最好的解决方案。

或者,您可以尝试添加本地 HTTP 代理。这样本地延迟将为 0ms,然后可以重用与远程服务器的 TCP 连接。

相关内容