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

设置:这是一个四CPU的机器,足够强大,根本没有加载(既不是CPU也不是networking),客户端是Windows Server 2008 64位,服务器是一个Linux的盒子。

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

我看到与X,Y和Z的连接已经形成(SYN-SYN / ACK),到X的第二个连接延迟了100毫秒。 意思是,机器不会将第二个SYN发送到X整整100毫秒。

这可能与TCP卸载引擎有关吗? 还有什么可能造成这种延迟?

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

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

一个不同的可能性:传出半开连接的Windows XP SP2限制,默认为10.我不确定你是怎么看到这个状态有多less个连接的,但是我相信如果这个速率限制器启动的话会显示在错误日志中。

Half-open.com

是否需要为每个请求执行DNS查找? 这是限制率?

初始连接通过罚款,但它是您的第二个连接,正在排队。 我将在软件中检查客户端实现,我不知道最近的JDK是否做了更多的更改,但是过去,即使您创build了单独的HttpUrlConnections,底层的协议处理程序仍然会重用套接字连接。

你应该检查在StackOverflow ,看看他们之前是否有处理过这个问题。

好的,有很多地方可能会出错。 你提到了TCP卸载引擎,这是一个合理的怀疑(特别是如果你有Broadcom网卡),所以让我们排除并禁用它(请参考你的文档)。

之后,你想开始减less其他可能的候选人,所以期待交换机,网线等。 如果可以的话,通过交叉连接源到目标,看看你是否可以在那里重现。

亲爱的老潘也是值得的,从这个angular度来看,你应该能够用4个同时的ping来重现异族行为。

但归结起来,在这个早期阶段没有任何意义,因为在那里可能会出错的地方太多(包括你的应用程序)。

你有没有检查你的防火墙设置? 防火墙设置中可能会有一些限制连接速度的内容。

你有什么特殊的sysctl设置的服务器? 在sysctl中可以做很多小的调整。

你检查过不同的服务器/客户端吗? 这是为了帮助隔离问题的原因 – 无论是特定的服务器,客户端还是两者。