我有一個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