10

node.js クライアント (10.177.62.7) が、サーバー (10.177.0.1) の http レスト サービスからデータを要求しています。クライアントは単純に node.js http.request() メソッド (agent=false) を使用しています。クライアントは Ubuntu 11.10 ボックスにあります。

クライアントが 475ms 後に FIN ACK を送信するのはなぜですか? なぜそんなに遅いのですか?彼はすぐに FIN ACK を送信する必要があります。私はこのような状況がたくさんあります。全体のトラフィックの約 1% が遅延 FIN ACK を伴うリクエストです。

クライアントの CPU アイドル率は約 99% であるため、CPU を浪費しているものはありません。

これをデバッグする方法は?どうなり得るか?調整が必要な sysctl オプションはありますか?

スクリーンショットの 2 列目は、パケット間の経過時間です。

大きな画像へのリンク。

ここに画像の説明を入力

4

1 に答える 1

4

この動作は、RFC1122 TCP スタックの遅延 ACK 機能です。

通常、 Linux TCP ソケットTCP_QUICKACKにオプションを追加して遅延 ACKを無効にする必要がありますが、JavaScript Node.js API では明らかではないと思います (オプションについてのみ見ました)。socket.setNoDelayTCP_NODELAY

したがって、 TCPスタックにシステム全体の変更を適用するというあなたの考えは良いようですが、sysctlこのソケットオプションの動作に一致するものは見つかりませんでした. 説明付きの別の完全なリストを次に示します。

于 2012-08-02T13:45:55.667 に答える