すべてのプロダクト
Search
ドキュメントセンター

:多数の接続がTIME_WAIT状態のままである場合、Windowsインスタンスが外部ネットワークにアクセスできない場合はどうすればよいですか。

最終更新日:Mar 04, 2025

このトピックでは、次の問題、問題の原因、および問題の解決策について説明します。Windows Elastic Compute Service (ECS) インスタンスは、インスタンスのTIME_WAIT状態に多数の接続がある場合、外部ネットワークにアクセスできません。

問題の説明

外部ネットワークはWindowsインスタンスからpingできますが、インスタンスからブラウザを使用して外部ネットワークにアクセスすることはできません。外部Webページを読み込むのに時間がかかりすぎるか、インスタンスでホストされているアプリケーションでネットワーク接続の例外が発生します。 インスタンスのコマンドプロンプトでnetstat -an | find "TIME_WAIT" /cコマンドを実行すると、コマンド出力は、多数のTCP接続がTIME_WAIT状態であることを示します。 コマンド出力の例を次の図に示します。View connections that are in the TIME_WAIT state

原因

Windows Server 2008以降では、16,384の動的ポート (ポート49152からポート65535) が既定で提供されます。 デフォルトでは、TCP接続は接続が閉じられるまで4分間TIME_WAIT状態のままです。 インスタンスで多数のTCP接続がアクティブな場合、多くの接続が同時にTIME_WAIT状態のままで、これらの接続が終了した後も多数のポートを消費し続けることがあります。 その結果、新しい接続またはアプリケーションには、消費するポートがなく、例外が発生します。

解決策

説明

このセクションでは、問題を解決する方法について説明します。 この例では、Windows Server 2012 R2を実行するインスタンスが使用されています。 実行する必要がある操作は、インスタンスのオペレーティングシステムによって異なる場合があります。

  1. 仮想ネットワークコンピューティング (VNC) を使用してWindowsインスタンスに接続します。

    詳細については、「VNCを使用したインスタンスへの接続」をご参照ください。

  2. コマンドプロンプトを起動します。

    1. デスクトップの左下隅にあるStart iconアイコンをクリックし、Search iconアイコンをクリックします。

    2. 検索ボックスにcmdと入力します。 Click Command Prompt

    3. [コマンドプロンプト] をクリックします。

      コマンドプロンプトウィンドウを開きます。 Open the Command Prompt window

  3. 次のコマンドを実行して、動的ポートの設定を表示します。

    netsh int ipv4 dynamicport tcp

    次の図は、コマンド出力のサンプルを示しています。これは、16,384の動的ポート (ポート49152からポート65535) が提供されていることを示しています。

    20230209142221

  4. 次のコマンドを実行して、ダイナミックポートの範囲を拡張します。

    netsh int ipv4 set dynamicport tcp start=1025 num=60000
    説明

    startパラメーターは、ダイナミックポート範囲の開始ポートを指定します。 numパラメーターは、動的ポートの数を指定します。 必要に応じてパラメーターを設定できます。

    次の図は、コマンド出力のサンプルを示しています。これは、動的ポートの数が60,000に増加し、新しい動的ポート範囲がポート1025で始まり、ポート61024で終わることを示しています。

    20230209142347

  5. 外部ネットワークに再度アクセスするか、アプリケーションを外部ネットワークに接続します。

    • 外部ネットワークにアクセスまたは接続できる場合、問題は解決されます。

    • 外部ネットワークにアクセスまたは接続できない場合は、TcpTimedWaitDelayレジストリキーの値を変更して、TCP接続がTIME_WAIT状態にある時間を短縮します。

  6. ダイナミックポート範囲を拡張しても問題が完全に解決されない場合は、TcpTimedWaitDelayレジストリキーの値を30秒に減らすことができます。 TcpTimedWaitDelayレジストリキーの最小値は30秒です。

    重要

    レジストリでの誤った操作によるオペレーティングシステムの問題やデータの損失を防ぐには、レジストリを変更する前に、インスタンスのシステムディスクとデータディスクのスナップショットを作成します。 レジストリを変更した後、変更を有効にするには、インスタンスを再起動する必要があります。

    1. レジストリエディターを起動します。

      1. デスクトップの左下隅にあるStart iconアイコンをクリックし、Search iconアイコンをクリックします。

      2. 検索ボックスにregeditと入力します。 Start Registry Editor

      3. regeditをクリックします。

        [レジストリエディター] ウィンドウを開きます。 Registry Editor for Windows Server 2012

    2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersパスに移動し、TcpTimedWaitDelayレジストリキーを10進値30に設定します

      TcpTimedWaitDelayキーが存在しない場合は、次の操作を実行してキーを作成し、その値を変更します。

      1. レジストリエディタウィンドウのHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersパスで、右側のウィンドウの空白領域を右クリックし、[新規]> [DWORD (32ビット) 値] を選択します。 Create the TcpTimedWaitDelay key

      2. TcpTimedWaitDelayを入力し、Enterキーを押します。

      3. TcpTimedWaitDelayを右クリックし、[変更] を選択します。 Modify the TcpTimedWaitDelay key

      4. 表示されるダイアログボックスで、Decimalを選択し、value dataフィールドの値を30に変更します Change the value to 30

      5. [OK] をクリックします。

参考資料