【環境】OS:Windows Server2008 R2 SP1
突然、下記のエラーが出力されるようになりました。
今回、ポートを全て使用してしまったため、ポートを再利用しようとしたが、TIME_WAITでポートの再利用ができなかったと推察しています。
発生した時間は不在の時間のため、netstatコマンドで確認できておらず、実際にTIME_WAITが発生していたかについては確認できていないため、推測して考えています。
-----------------------------------------------------------------------------
種類:警告
ソース:Tcpip
イベントID:4227
説明:
選択したローカルエンドポイントは、同じリモートエンドポイントに接続するために最近使用されたため、 TCP/IP は発信接続を確立できませんでした。
一般にこのエラーが発生するのは、複数の発信接続が高速 に開始および終了されることにより、すべての利用可能なローカル ポートがふさがってしまい、TCP/IPが発信接続のためにローカルポートを再利用することを強いられる場合です。
データ破損のリスクを最小化するために、TCP/IP 標準では、特定のローカルエンドポイントから特定のリモートエンドポイントに連続した複数の接続を確立する際に、それぞれの接続間に最小限の時間間隔を空けることを要求しています。
------------------------------------------------------------------------------
対処として、下記を考えておりますが、早く対処を行いたいと考えておりますので、この対応が効率的に対応できる方法であるかアドバイス頂ければ、幸いです。
【考えている対処方法】
下記のような10ミリ秒単位でnetstat -anの結果を出力するBATを作成してそれをタスクスケジューラに登録して実行させる。
その結果、TIME_WAITが多ければ、『TIME_WAITの時間を短くする』にてポートのクローズを早くして再利用できるようにするまたは『MaxUserPort値を大きくする』 にて使用できるユーザポートの拡張を行う対処を行う。
-------------------------------------
@echo off
:LOOP
%date% %time% > C:\netstat.txt
netstat -an >> C:\netstat.txt
REM // 10ミリ秒
sleep 10
goto :LOOP
-------------------------------------
TIME_WAITの結果が少なければ、『460568_intl_x64_zip.exe(1.29MB) 展開後:Windows6.1-KB2826167-x64.msu(1.17GB)』
を適用する。
-----------------------------------------------
TCP/IP イベント ID 4227 に関する対策について
https://support.microsoft.com/ja-jp/kb/2916780
Windows 7 SP1 または Windows Server 2008 R2 の SP1 での複数の IP アドレスにワイルドカードの TCP ポートを再利用することはできません。
https://support.microsoft.com/ja-jp/kb/2826167
サポート技術情報番号 : 2826167
言語 : All (Global)
プラットフォーム : x64
ダウンロード先 :
(http://hotfixv4.microsoft.com/Windows%207/Windows%20Server2008%20R2%20SP1/sp2/Fix426296/7600/free/460568_intl_x64_zip.exe
------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------
① 『TIME_WAITの時間を短くする』にてクローズしたセッションの再利用までの待ち時間を早める方法
(1).regeditを実行する。
(2).レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\ParametersにTcpTimedWaitDelay(DWORD) を作成し、
その値に TIME_WAIT の値を秒単位で設定します。
※ WindowsServer 2008 R2には、TcpTimedWaitDelay(DWORD)がないので、作成する必要がありそうです。
※ TcpTimedWaitDelay(DWORD)の値の範囲は30s~300sでデフォルトは120s。
② 『MaxUserPort値を大きくする』にて使用できるユーザーポートの拡張方法
(1).regeditを実行する。
(2).レジストリキー : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPortにMaxUsePort(DWORD) を作成し、
その値にユーザーポートの最大値を設定します。
※ WindowsServer 2008 R2には、MaxUsePort(DWORD) がないので、作成する必要がありそうです。
※ MaxUsePort(DWORD)の値の範囲は、5000~65534(10進数)でデフォルトは5000。
http://technet.microsoft.com/ja-jp/library/aa995661%28EXCHG.80%29.aspx?ppud=4