zoukankan      html  css  js  c++  java
  • 超出TCP连接端口数限制(MaxUserPort)引起的服务器问题

    昨天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进制)的项目并重启计算机。

  • 相关阅读:
    c++ stringstream
    c语言中字符串数组初始化的一点总结&& c++访问控制的三种方式
    Leetcode 2. Add Two Numbers(medium)
    面试题---反转一个字符串
    编程题---在数组中取一个位置,让这个位置之前的数的和与之后的和的差绝对值最小
    美团面试准备
    Leetcode 101. Symmetric Tree(easy)
    Leetcode 665. Non-decreasing Array(Easy)
    617. Merge Two Binary Trees(Easy)
    423. Reconstruct Original Digits from English(Medium)
  • 原文地址:https://www.cnblogs.com/Alex80/p/15723903.html
Copyright © 2011-2022 走看看