我有一个node.js客户端(10.177.62.7)从服务器(10.177.0.1)的http rest服务请求一些数据。客户端只需使用node.js http.request()方法(agent = false)。客户端在Ubuntu 11.10盒子上。客户端发送延迟的FIN ACK(〜500ms)到服务器
为什么客户端在475ms后发送FIN ACK?为什么这么慢?他应该立即发送FIN ACK。我有很多这样的情况。大约1%的流量是延迟FIN ACK的请求。
客户端的Cpu闲置约为99%,所以没有任何东西正在消耗CPU。
如何调试?会是什么呢? 是否有我需要调整的任何sysctl选项?
在屏幕截图第二列是数据包之间经过的时间。
我删除了有关HTTP保持活动的答案,因为它已被明确排除。尽管如此,我想不出任何其他答案。一旦插座关闭,FIN应该熄灭。 – 2012-07-29 21:23:14
@AlanCurry但是,只有当客户端读取了传入的FIN并决定关闭套接字时,* FIN/ACK *才会消失,这可能需要很长时间。这是node.js的行为,而不是TCP/IP堆栈。 – EJP 2012-07-30 00:11:28
当然,但是如果它正在调用一个http客户端库的过程中,它不会保持活动状态,并且CPU负载为1%,那么在读取EOF之后关闭套接字需要多长时间? – 2012-07-30 00:15:39