什么原因导致启动 HTTP 连接延迟 100 毫秒?

什么原因导致启动 HTTP 连接延迟 100 毫秒?

设置:这是一台四 CPU 机器,非常强大,根本没有加载(既没有 CPU 也没有网络),客户端是 Windows Server 2008 64 位,服务器是 Linux 机箱。

我有四个线程,它们同时发出 HTTP 请求。连接发起到 IP X、X、Y、Z(两个连接到 X,一个连接到 Y 和 Z)。所有目标都在本地 LAN 上。

我看到与 X、Y 和 Z 的连接已建立 (SYN-SYN/ACK),并且与 X 的第二个连接有 100 毫秒的延迟。这意味着机器不会在整整 100 毫秒内向 X 发送第二个 SYN。

这可能与TCP 卸载引擎? 还有什么原因可能导致这种延迟?

编辑- 另一个嫌疑是客户端代码 - 它是用 Java 编写的,使用 HttpURLConnection。

答案1

网络跟踪(例如 Wireshark)将显示延迟是否在等待响应。它还会指出其他“绕行路线”,例如有关 DNS 的建议。听起来你可能已经这样做了,但你没有说。

答案2

另一种可能性:Windows XP SP2 对传出半开连接的限制,默认为 10。我不确定您如何看到处于这种状态的连接数,但我相信如果这个速率限制器启动,它将显示在错误日志中。

半开放网

答案3

每次请求都要进行 DNS 查询吗?这会限制速率吗?

答案4

好的,有很多地方可能出错。您提到了 TCP 卸载引擎,这是一个合理的怀疑(特别是如果您在其中安装了 Broadcom NIC),因此让我们排除它并禁用它(有关这一点,请参阅您的文档)。

之后,您需要开始减少其他可能的候选者,因此请考虑交换机、网线等。如果可以,请通过交叉线将源连接到目标,看看是否可以在那里重现它。

亲爱的老朋友,这也是值得尝试的ping- 从声音上看,您应该能够通过 4 次并发 ping 来重现异常行为。

但归根结底,怀疑是没有意义的任何事物在这个早期阶段,因为有太多地方可能出错(包括您的应用程序)。

相关内容