设置:这是一个四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中可以做很多小的调整。
你检查过不同的服务器/客户端吗? 这是为了帮助隔离问题的原因 – 无论是特定的服务器,客户端还是两者。