3

サーバー アプリケーションはポートをリッスンしており、しばらくすると着信接続を受け入れなくなります。(そして、私はこの問題を解決したいと思っていますが、それは私がここで尋ねていることではありません;)

奇妙なことに、アプリがポート 44044 での接続の受け入れを停止すると、IIS (ポート 8080) も停止します。アプリを強制終了するとすべてが修正され、IIS が再び応答を開始します。

問題は、アプリケーションが TCP/IP スタック全体をめちゃくちゃにすることができるかということです。あるいは、アプリケーションはどのようにそれを行うことができるのでしょうか?

無意味な詳細: 私たちのアプリは、XP/SP2 の .Net 2.0 の下で C# で書かれています。

明確化: IIS は試行された接続を「拒否」していません。それらを見ることは決してありません。クライアントが「サーバーがタイムリーに応答しませんでした」というメッセージを受け取ります (.Net TCP クライアントを使用)。

4

7 に答える 7

5

スタックが不足している可能性があります。大量のプールされていないリクエストを処理する Web サーバーなど、1 秒あたりのオープン/クローズ トランザクションが多い環境では、非常に簡単に排出されます。

これは、デフォルトの TIME-WAIT 遅延によって悪化します。リサイクルされる前にソケットを閉じる必要がある時間は、デフォルトで 90 秒です (私の記憶が正しければ)。

微調整できるレジストリ キーが多数あります - 少なくとも次のキーを作成/編集することをお勧めします

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

TcpTimedWaitDelay = 30
MaxUserPort = 65534 
MaxHashTableSize = 65536 
MaxFreeTcbs = 16000 

これらのキーの機能については、MSDN と Technet に多数のドキュメントがあります。

于 2008-09-25T17:03:02.020 に答える
4

利用可能なポート ハンドルを使い果たしていませんか?
netstat -a

アプリがポートを開閉しているときに似たようなものを見ました (ただし、実際にはポートを正しく閉じていません)。

于 2008-09-25T13:50:59.017 に答える
1

皆さんからの良い提案、助けてくれてありがとう。

何が起こっていたのかというと、同じポートをめぐって競合するいくつかのサービスがあり、ほとんどの場合、「適切な」サービスがポートを取得することがわかりました。場合によっては、2 番目のサービスがポートを取得し、最初のサービスが別のポートを開こうとすることがあります。それ以降、サービスはリクエストを処理するたびに新しいポートを取得し続け (優先ポートを使用していなかったため)、最終的には使用可能なすべてのポートを使い果たしました。

もちろん、実際の質問は「アプリケーションが TCP/IP スタック全体をめちゃくちゃにすることはできるか?」であり、その質問に対する答えは「はい」です。それを行う 1 つの方法は、多数のポートをリッスンすることです。

于 2008-10-09T18:41:41.260 に答える
1

これが発生したときにアクティブな接続を確認するには、netstat -a を使用します。おそらく、サーバーアプリが「閉じられた」接続を閉じたり破棄したりしていません。

于 2008-09-25T13:52:17.783 に答える
0

私自身、似たような状況に何度か遭遇しました。適切なトラブルシューティング手順は、影響を受けるマシンから、その時点で接続の問題が発生していない既知の宛先への接続を試みることです。接続の試行が失敗した場合、エラー メッセージ/コードでさらに興味深い詳細が得られる可能性が非常に高くなります。たとえば、ハンドルやメモリが不足している可能性があります。

于 2008-09-25T22:20:02.663 に答える
0

RichS からのポート番号のコメントは正しいと思います。

それ以外では、TCP/IP スタックはオペレーティング システムの単なるモジュールであるため、アプリケーションがそれを強制終了する可能性のあるバグが含まれている可能性があります。プログラムによって殺される最初のドライバーではありません。

(オペレーティング システムはモノリシックではなくモジュール式であるべきだと主張した Andrew Tanenbaum に敬意を表します。)

于 2008-09-25T13:54:09.073 に答える