文章出處
文章列表
昨天2臺Windows Server 2012服務器出現奇怪的問題,自己竟然連不上自己的本機80端口,telnet 127.0.0.1 80也連不上,而更奇怪的是其它服務器可以連接到這2臺服務器的80端口。在這2臺服務器上,瀏覽器打不開任何網站,但能ping通。重啟其中1臺服務器后,被重啟的服務器恢復正常。
服務器用的是阿里云的,開始以為是阿里云的問題,向阿里云提交了工單。在提交了 netstat -nat 的信息后,阿里云工程師很快定位出問題原因,是TCP MaxUserPort不夠用引起的,當時TCP連接的端口數是6000多,而Windows的默認最大TCP連接端口數(MaxUserPort)是5000。
知道這個原因后,上那臺還在故障中的服務器,用netstat -n | find /C /I "established"
一看,果然超過了5000(如果用PowerShell,可以用命令Get-Counter -Counter \TCPv4\*
查看)。
從這個原因出發,所有的故障現象都有了合理的解釋:
- 連不上自己的本機80端口:連接本機80端口,也需要客戶端TCP端口,沒端口可用當然連不上;
- 其它服務器可以連接到這2臺服務器的80端口:其它服務器只是連接這2臺服務器已有的80端口,不需要額外的端口;
- 瀏覽器打不開任何網站:瀏覽器訪問網站,建立TCP連接需要分配客戶端TCP端口;
- 能ping通:ping走的是ICMP協議,不夠用的是TCP協議的端口,所以不受影響;
- 重啟后恢復正常:占用的TCP端口被重置,重新分配,還未達到5000的限制。
知道了真正原因,解決起來就很簡單,修改最大TCP連接端口數(MaxUserPort)限制,修改方法:在注冊表HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
中添加名為MaxUserPort,類型為DWORD(32-bit),值為65543(10進制)的項目并重啟計算機。
文章列表
全站熱搜