windows-動態端口問題

最近在對接rest時發現一個比較奇怪的問題,在Windows Web Server 2008上,用rest客戶端發送數據時報錯:
bind: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
經查,發現是因爲頻繁的打開關閉客戶端的動態端口造成的。查找資料最後總結了一些解決方案,目前看是有效的。
1、修改動態端口的範圍
首先看下服務器的動態端口設置情況:
netsh int ipv4 show dynamicport tcp
一般如下:
在這裏插入圖片描述
表示動態端口是從49152開始,一共有16384個
我們修改一下動態端口的範圍和個數:
netsh int ipv4 set dynamicport tcp start=30000 num=20000
表示修改動態端口從30000起,一共有20000個。這時候需要注意的是,儘可能避開自己服務使用的端口,做一下簡單的規劃。

2、修改tcp的TimedWaitDelay時間
打開註冊表:HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters, 未手動修改時是默認的120s。在Parameters的右邊空白處下右鍵新建一個項,如圖:
在這裏插入圖片描述
key值填寫TcpTimedWaitDelay,value值選十進制,寫10。表示最長wait時延爲10s。
在這裏插入圖片描述
上面第一步我們已經修改了端口的動態範圍,就沒必要在註冊表中設置,如果要是還想設置也可以。和修改TcpTimedWaitDelay一樣,建一個key爲MaxUserPort的項,value值填寫50000,表示1024~50000之間的端口爲動態端口。
操作第2步需要重啓機器

3、連接池
確認自己的程序中對http客戶端的使用,最好是有一個連接池,使用已經存在的鏈接,這種情況需要結合實際問題解決

參考:
https://blog.csdn.net/zl325118/article/details/87073474
https://support.microsoft.com/en-us/help/929851/the-default-dynamic-port-range-for-tcp-ip-has-changed-in-windows-vista
https://support.cerberusftp.com/hc/en-us/articles/202639489-Why-do-I-see-An-operation-on-a-socket-could-not-be-performed-because-the-system-lacked-sufficient-buffer-space-or-because-a-queue-was-full-error-mesasges-in-the-log-file-

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章