背景:.NET TCPサーバは、大きな塊数分ごとにバイトを受信
- れるtcpClientオブジェクトが
- 一度AcceptTcpClient方法でTcpListenerに遮断することによって割り当てられ
- C#.NETの同期TCPサーバそこにはTcpClientオブジェクトがあり、クライアントのGetStreamメソッドを呼び出してNetworkStreamを作成するスレッドに渡します。
- このNetworkStreamはループバックされ、各繰り返しでnetworkStream.Read(someBuffer、0、4096)を実行します。 今、クライアントとサーバーが私のサーバーは、私は別のマシンに私のサーバーソフトウェアをロードした場合、問題が離れて行く
- をスペアメモリがたくさんある
- の話をしていない渋滞で、同じネットワーク上に配置されている0
- キッカー:ネットワークのLinuxボックスから交通罰金を通って、時間になっ
私のサーバーは、数ヶ月のためにうまく機能しています。しかし、過去週末に小さなグループのバイトを連続して受け取る代わりに、プロセスが開始される場所(tcpListener.AcceptTcpClient())は数分ごとに発生します。だから、私のサーバーはアイドル状態になり、30-50のクライアント要求がすべて1つの大きなブロックブロックにまとめられます。言うまでもなく、これは膨大な遅延を引き起こし、サーバーに負担をかけることになります。クライアントの要求のまとまりが十分に大きければ、それに追いつくのに30分かかることがあります。
私のクライアントに組み込まれたロギングでは、ネットワークの書き込みを確認し、それぞれの間でフラッシュすることができます。したがって、クライアントは正しく機能しています。
これは何らかのシステムの介入を引き起こします。私のTcpサーバー(上記のような)が悪いですか、Windowsでトラフィックに干渉するものがあります。どのように伝えることができますか?
ありがとうございます。
週末に何が変わったのですか?コードの変更?ネットワークの保守?清掃担当者がルータの交換を真空にする? –
コードは変更されず、サーバーに変更はありません。私は他に何が変わったかを知るためにさらに多くのものを突っ込んでいます。 – kmarks2
サーバーにService Packが適用されていませんか?これは、接続の問題、espのように思えます。あなたのコードはしばらくの間実行されていて、別のマシン上で実行されているからです。あなたがいる組織のタイプはわかりませんが、大企業では、ネットワーク管理者がスイッチングハードウェアやサーバ管理者がSPを適用した場合に起こります。 –