【问题标题】:Client sends delayed FIN ACK (~500ms) to server客户端向服务器发送延迟的 FIN ACK (~500ms)
【发布时间】:2012-07-27 12:20:20
【问题描述】:

我有一个 node.js 客户端 (10.177.62.7) 从服务器 (10.177.0.1) 请求来自 http rest 服务的一些数据。客户端只是使用 node.js http.request() 方法(agent=false)。客户端在 Ubuntu 11.10 机器上。

为什么客户端在 475 毫秒后发送 FIN ACK?为何这么慢?他应该立即发送 FIN ACK。我有很多这样的情况。大约 1% 的总流量是带有延迟 FIN ACK 的请求。

客户端上的 CPU 空闲率约为 99%,因此没有任何东西消耗 CPU。

如何调试这个?会是什么呢? 我需要调整任何 sysctl 选项吗?

屏幕截图第二列是数据包之间经过的时间。

Link to bigger picture.

【问题讨论】:

  • 我删除了关于 HTTP keep-alive 的答案,因为它已被明确排除。虽然想不出其他答案。一旦套接字关闭,FIN 应该会熄灭。
  • @AlanCurry 但是 FIN/ACK 只有在客户端读取传入的 FIN 并决定关闭套接字时才会消失,这可能需要任何时间。这是 node.js 的行为,而不是 TCP/IP 堆栈。
  • 当然可以,但是如果它在调用 http 客户端库的过程中,它不会保持活动状态,并且 CPU 负载是 1%,那么在关闭套接字之后需要这么长时间阅读EOF?
  • 同时连接多少?您生成的总连接数是多少?请求的对象有多大?客户端和服务器之间的网络延迟是多少?你的 POST 对象有多大?其中有多少是同时发生的?当连接出现错误时,您是否在客户端中实施任何类型的退避?
  • @Tereska:您可能已经烧毁了所有临时端口,并且正在等待其中一些端口的 2xMSL 超时完成,然后才能创建新连接。你检查过 netstat 吗?

标签: linux node.js networking tcp tcpdump


【解决方案1】:

此行为是 RFC1122 TCP stack 的延迟 ACK 功能。

通常您应该将TCP_QUICKACK 选项添加到您的Linux TCP socketdisable delayed ACK,但我认为这对于JavaScript Node.js API 并不明显(我只看到socket.setNoDelay 用于TCP_NODELAY 选项)。

所以您应用system-wide change on TCP stack 的想法似乎不错,但我发现没有sysctl 与此套接字选项行为匹配。这是另一个full list with explanation

【讨论】:

  • 这看起来是正确的答案,除非 OP 没有提供更多细节
  • 感谢您的回答!我还有一些问题。这对 FIN ACK 有效还是仅对“单独”ACK 有效。你能说出为什么内核延迟了那个 FIN/ACK 吗?在 tcpflow 数据中,每个来自服务器的数据包只有一个 ACK​​。为什么内核延迟客户端 FIN/ACK。它可以避免每个“数据”数据包都发送 ACK。但是它选择延迟FIN/ACK?这可能吗?
  • 请阅读 RFC1122 的 4.2.3.2 部分...它不是特定于 FIN 数据包的。我同意你的观点,没有理由延迟没有数据的 FIN+ACK 数据包。我邀请您就 LKML 或开源代码联系 Linux 内核 TCP 团队以获取延迟 ACK 逻辑实现。可能可以进行优化,并且至少可以使用新的 sysctl 开关来避免这种行为。
  • LKML (netdev) 说这是应用程序问题。 marc.info/?l=linux-netdev&m=134409837229053&w=2
  • 您说只有 1% 的流量受到延迟的影响。所以它不是来自应用程序代码处理本身,而是可能来自 JavaScript 引擎本身,如垃圾收集延迟以在使用后丢弃套接字......您应该尝试使用备用 JavaScript 引擎和不同的浏览器运行您的代码。你有没有在 dmesg 中发现奇怪的线条? strace-ing 浏览器是可能的,但它真的很难分析。也许 strace-ing 在独立 JavaScript 引擎中运行的代码是获得诊断的一种选择
猜你喜欢
  • 2019-06-09
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2022-01-05
  • 2017-10-09
  • 1970-01-01
相关资源
最近更新 更多