當客戶端啟動到服務器的 TCP/IP 套接字連接時,客戶端通常連接到服務器上的特定端口,并請求服務器通過臨時(或暫時)TCP 或 UDP 端口進行響應。在 Windows Server 2003 和 Windows XP 中,客戶端應用程序所使用的臨時端口的默認范圍為 1025 到 5000。在某些情況下,有可能耗盡默認范圍的可用端口。
TCP/IP 端口耗盡的癥狀隨客戶端應用程序的不同而不同,但通常都表現為顯示網絡連接失敗錯誤。若要確定網絡連接失敗是否是由 TCP/IP 端口耗盡造成的,請在客戶端計算機上執行以下步驟:
-
在運行 Windows XP 或 Windows Server 2003 的計算機上單擊“開始”,再單擊“運行”,然后鍵入
cmd
,單擊“確定”打開命令提示。
-
執行以下操作之一:
-
在 Windows XP 或 Windows Server 2003 計算機上的命令提示中輸入以下命令,顯示此計算機上 TCP/IP 協議所使用的活動連接:
?netstat -n
-
在基于 Windows Server 2003 的客戶端計算機的命令提示中輸入以下命令,以顯示 TCP/IP 協議所使用的活動連接:
?netstat -b
-
在 Windows XP 或 Windows Server 2003 計算機上的命令提示中輸入以下命令,顯示此計算機上 TCP/IP 協議所使用的活動連接:
與 TCP/IP 端口耗盡有關的問題
當客戶端應用程序嘗試使用 TCP/IP 套接字連接到 BizTalk Server,或當 BizTalk 應用程序嘗試使用 TCP/IP 套接字連接到服務器時,可能會出現類似于下面的情況:
System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send.
- 或者 -
Unable to connect to the remote server System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.
當出現這些錯誤時,還可能出現以下問題:
-
客戶端應用程序可能無法連接到 BizTalk Server。
-
BizTalk 應用程序服務可能無法連接到遠程 SQL 服務器。
-
BizTalk Server 適配器可能無法連接到遠程服務器。
-
客戶端應用程序預留的每個端口均占用內核內存。如果預留了數目超常的客戶端端口,Windows 內核內存的占用率將相應增加。
原因
如果客戶端計算機中存在數目超常的 TCIP/IP 套接字連接,則客戶端計算機上可能出現 TCP/IP 端口耗盡的情況。如果多個客戶端應用程序都在建立連接,則可能出現這種情況。
如果所有可用的臨時端口都分配給了客戶端應用程序,則客戶端將出現 TCP/IP 端口耗盡的情況。當 TCP/IP 端口耗盡時,將無法預留客戶端端口,并且嘗試通過 TCP/IP 套接字連接到服務器的客戶端應用程序也將出錯。
在高負載情況下,比處于正常負載時更容易出現 TCP/IP 端口耗盡的情況。
解決方法
執行以下步驟以避免 TCP/IP 端口耗盡及其相關問題:
-
驗證客戶端應用程序沒有生成過多的 TCP/IP 套接字連接。這一點可以用上面提到的方法來檢查,即在 Windows Server 2003 和 Windows XP 上運行
netstat -n
,或者在 Windows Server 2003 和 2008 上運行
netstat -b
。
如果某個客戶端應用程序使用了數量超常的 TCP/IP 套接字連接,則應考慮重新設計客戶端應用程序,以便更有效地使用 TCP/IP 套接字連接。
注意
如果為 BizTalk 應用程序服務 (BTSNTSvc.exe) 實例預留了數量超常的客戶端端口,則需驗證配置為在 BizTalk 應用程序服務中運行的任何自定義代碼都沒有建立過多的 TCP/IP 套接字連接。 ?
?
-
如果大量客戶端應用程序要啟動已知數量的 TCP/IP 套接字連接,但沒有足夠數量的可用臨時端口來滿足連接請求,則需要進行以下注冊表修改。
警告
如果注冊表編輯器使用不當,則可能會產生嚴重問題,導致重新安裝操作系統。Microsoft 不保證可以解決因注冊表編輯器使用不當而造成的問題。請慎用注冊表編輯器,風險自負。在修改注冊表之前,請務必備份注冊表,并確保您知道在發生問題時如何使用備份進行還原。有關如何備份、還原及修改注冊表的詳細信息,請參閱 Microsoft 知識庫文章“Microsoft Windows 注冊表說明”,網址為 http://go.microsoft.com/fwlink/?LinkId=62729 。 ?
?
-
啟動注冊表編輯器。
-
在注冊表中,瀏覽到并單擊以下注冊表項。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
-
在“編輯”菜單中單擊“新建”、“DWORD 值”,然后添加以下注冊表值,以增加可以動態分配到客戶端的臨時端口的數量:
?
值名稱
MaxUserPort
值數據
<在此輸入一個 5000 到 65534 之間的十進制值>
-
關閉注冊表編輯器。
注意
必須重新啟動計算機,此更改才會生效。 ?
?
注意
增加用于客戶端 TCP/IP 連接的臨時端口的范圍將占用 Windows 內核內存。請勿將此設置的值增加至超過容納客戶端應用程序套接字連接所需要的值,以便盡可能降低對 Windows 內核內存的不必要占用。 ?
?
-
啟動注冊表編輯器。
-
在注冊表中,瀏覽到并單擊以下注冊表項。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
-
在“編輯”菜單中單擊“新建”、“DWORD 值”,然后添加以下注冊表值,以縮短關閉連接時,該連接處于 TIME_WAIT 狀態的時間。當連接處于 TIME_WAIT 狀態時,套接字對無法重新使用:
?
值名稱
TcpTimedWaitDelay
值數據
<在此輸入一個 30 到 240 之間的十進制值。>
-
關閉注冊表編輯器。
注意
必須重新啟動計算機,此更改才會生效。 ?
?
注意
此值的有效范圍為 30 到 300(十進制)之間。默認值為 240。
-
啟動注冊表編輯器。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
