※この記事は以下の記事の日本語訳です。
Terminal Server Agent Registry Tuning for Better Port Allocation and Handling, Time Wait State
特定のサイトへWebブラウザでアクセスする際、ターミナルサーバーによりユーザはすべてを閲覧することが出来ません。
原因は、一部のWebサイトにおいてポートを解放するより前に短時間にポートを多く使用することがあるためです。Webサイトからの継続的なポート割り当てにより、Windowsオペレーティングシステムがポートを開放する前に、Terminal Server Agent(TSA)からの早すぎるポートの割り当てが発生します。したがって、接続エラーが発生します。
注:この問題は、多数のポートの使用と解放を高速に行うアプリケーションでも発生する可能性があります。
Windows は Timed Wait State をポートに割り当てます。これはWindows上で設定可能な値です。30-300 秒の10進数の値で、デフォルトは240秒です。
(Default) REG_SZ (value not set)
TcpTimedWaitDelay REG_DWORD 0x0000001e (30)
対応するレジストリ設定:
この問題に対処するため、TSA (Terminal Server Agent) バージョン5.0.1 では新しい設定が導入されました。この追加された Time Wait State (TWS) 設定により、TSエージェントは Windows システムの TcpTimedWaitDelay を追跡することができるため、Timed Wait State にあるポートはTSエージェントにより選択されなくなります。この設定を有効にすると、システムがポートブロックの通常の低いしきい値に達すると、新しいポートブロックが割り当てられます。デフォルトでは、この新しい動作は無効になっており、レジストリの編集でのみ設定の変更が可能です。
加えて、複数のポートが Timed Wait State に置かれることから、ユーザーの多くのアクティビティによりさらに多くのポートが Timed Wait State となり、その結果その時点では実際には必要のない追加のブロックが割り当てられる可能性があります。他のユーザーは、その他のユーザが蓄積している、すでに必要のない、しかしアクティビティ不足により開放されないポートブロックにより、ポート不足に陥るかもしれません。これに対処するため、TSAに不要となったポートブロックを解放するためにドライバをポーリングするタイマー設定を導入しました。このタイマーは、TWS機能が有効な場合にのみ実行されます。デフォルトのタイマー値は240秒で、レジストリで変更することができます。
Time Wait State (TWS) 機能の動作と設定
この機能を有効にするUIはありません。この機能を無効にする際にも、Windowsレジストリを編集する必要があります。
警告:レジストリの変更を行うときは注意が必要です。レジストリの値の変更時にエラーチェックはありません。
TWSの有効化/無効化
未使用ポートブロックの定期的な消去:
多くのTime Wait 接続のためにポートが枯渇した場合は、次のレジストリを変更してください。
2番目のregedit値がない場合には、手動で追加する必要があります。これらの値は Windows カーネルに、TcpTimedWaitDelay 設定の代わりに、カーネルに30秒以内にこれらのポートを解放するよう通知します。これらの設定がない場合、Windowsカーネルは、ビジー状態等が発生した際にポートを解放するのを遅延させる可能性があります。
最初の2つの値は、WindowsカーネルにTime_Waitedポートを30秒以内に解放するように指示します(デフォルトのカーネル値:240秒)。 TSエージェント側でこのような値を短くする場合は、一貫性を保つために Windows カーネルの値も短くする必要があります。
注:ターミナルサーバーエージェントサービスは、TSエージェントのレジストリ値を変更した後にサービスを再起動する必要があります(3番目と4番目の値)。 カーネルの Tcpip スタックの パラメータ(最初と2番目の値)が変更された場合、Windows OSを再起動する必要があります。
owner: sberti