【发布时间】:2014-10-04 23:33:37
【问题描述】:
我们在传输大文件时观察到以下行为。服务器发送 64k 的 tcp 数据,最大段大小(mss=1469,所以 44*1460 字节,加上 1*1296 字节),没有任何延迟。所以服务器端的 Nagle 没有问题。当最后一个数据包被发送时,它设置了 Push 标志,这向我表明发送缓冲区已清空。
然后在收到来自客户端的最终 ACK 之前会有 200 毫秒的不必要延迟。显然这是因为客户端使用了 tcp 延迟确认(我无法影响的行为)并且我们的段数不相等。
据我了解,如果 tomcat 会不断发送数据,我们会避免在每 64k tcp 数据后出现 200ms 的延迟。
问题:
tomcat 只发送 64k 的预期行为,然后在发送更多数据之前等待最终确认?
是否有任何方法可以调整 tomcat 的行为,使其更连续地发送数据(不会在每个 64k 数据块之后耗尽 sendbuffer)?
【问题讨论】:
-
这个视频packetbomb.com/solving-tomcat-throughput-issues-on-windows 谈到了这个问题,似乎改变缓冲区大小或多或少地解决了这个问题。但没有给出真正的理由......
标签: performance sockets tomcat tcp send