默認情況下,Windows允許用于使用5000個臨時(短命)TCP端口。任何端口關閉后,它將在TIME_WAIT狀態保持120秒。與重新初始化全新的連接相比,該狀態允許以更低的開銷重新使用連接。但是,在該時間逝去前,無法再次使用該端口。
對于小的可用TCP端口堆棧(5000),以及具有TIME_WAIT狀態的大量在短時間內打開和關閉的TCP端口,你很可能遇到端口耗盡問題。處理該問題的方法有兩種:
· 通過調查連接池以及可能的持久連接,減少快速消耗的TCP端口數。
· 調整Windows注冊表中的某些設置(請參見下面)。
要點:下述步驟涉及更改Windows 注冊表。更改注冊表之前,請備份注冊表,并確認你已掌握在出現問題時恢復注冊表的方法。關于備份年、恢復和編輯注冊表的更多信息,請請參見Microsoft知識庫中的下述文獻:http://support.microsoft.com/kb/256986/EN-US/。
· 啟動注冊表編輯器(Regedt32.exe)。
· 在注冊表中確定下述鍵值的位置:
· HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
· 在“編輯”菜單上點擊“添加值”,然后增加下述注冊值:
· Value Name: MaxUserPort
· Data Type: REG_DWORD
· Value: 65534
它用于設置為任何用戶提供的臨時端口數。有效范圍介于5000和65534之間(十進制)。默認值為0x1388(5000,十進制)。
· 在“編輯”菜單上點擊“添加值”,然后增加下述注冊值:
· Value Name: TcpTimedWaitDelay
· Data Type: REG_DWORD
· Value: 30
它用于設置關閉之前將TCP端口連接保持在TIME_WAIT狀態的秒數。有效范圍介于0秒和300秒之間。默認值為0x78(120秒)。
· 退出注冊表編輯器。
· 重新引導機器。
注釋:撤銷上述設置十分簡單,就像刪除你創建的注冊表一樣。