Ich habe einen node.js Client (10.177.62.7), der einige Daten vom http Rest Service vom Server (10.177.0.1) anfordert. Der Client verwendet einfach die Methode http.request() von node.js (agent = false). Client ist auf Ubuntu 11.10-Box.Der Client sendet eine verzögerte FIN ACK (~ 500ms) an den Server
Warum Client sendet FIN ACK nach 475ms? Warum so langsam? Er sollte FIN ACK sofort senden. Ich habe viele Situationen wie diese. Ungefähr 1% des gesamten Datenverkehrs ist eine Anfrage mit verzögertem FIN ACK.
Cpu Leerlauf auf dem Client ist etwa 99%, so dass nichts CPU entleert.
Wie debuggen Sie das? Was könnte es sein? Gibt es irgendeine sysctl Option, die ich tunen muss?
Auf Screenshot 2. Spalte ist die verstrichene Zeit zwischen den Paketen.
Ich löschte meine Antwort über HTTP Keep-Alive, da es definitiv ausgeschlossen wurde. Ich denke jedoch nicht an andere Antworten. Das FIN sollte ausgehen, sobald die Steckdose geschlossen ist. –
@AlanCurry Aber das * FIN/ACK * würde nur ausgehen, wenn der Client das eingehende FIN gelesen hat und entschieden hat, den Socket zu schließen, was eine gewisse Zeit dauern kann. Dies ist ein Verhalten von node.js, nicht der TCP/IP-Stack. – EJP
Sicher, aber wenn es in der Mitte eines Aufrufs zu einer HTTP-Client-Bibliothek ist, macht es Keep-Alive nicht, und die CPU-Last ist 1%, was dauert es so lange, den Socket nach dem Lesen von EOF zu schließen? –