小小麻雀子 - 2024年11月
type: channel
link: https://www.maquezi.com/index.php/2024/11/
description: 麻雀虽小,五脏俱全
items: 排查端口耗尽问题

排查端口耗尽问题
type: item
date: 2024-11-25T09:09:00+08:00
description: TCP/IP 的默认动态端口范围可以使用以下命令 netsh 查看计算机上的动态端口范围：netsh int ipv4 show dynamicport tcp netsh int ipv4 show dynamicport udp 为每个传输 (TCP 或 UDP) 单独设置范围netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range 起始端口为数字，端口总数为范围。 下面是示例命令：netsh int ipv4 set dynamicport tcp start=10000 num=1000 netsh int ipv4 set dynamicport udp start=10000 num=1000 这些示例命令将动态端口范围设置为从端口 10000 开始，在端口 10999 结束， (1000 个端口) 。 可设置的最小端口范围为 255。 可设置的最小启动端口为 1025。 根据配置的范围) 的最大结束端口 (不能超过 65535。 若要复制 Windows Server 2003 的默认行为，请使用 1025 作为起始端口，然后使用 3976 作为 TCP 和 UDP 的范围。 此使用模式导致开始端口 1025 和结束端口 5000。排查端口耗尽问题从服务器收集 netstat -anob 输出。 netstat 输出将显示单个 PID TIME_WAIT状态的大量条目。正常关闭或会话突然关闭后，经过 4 分钟 (默认) ，进程或应用程序使用的端口将释放回可用池。 在这 4 分钟内，TCP 连接状态将TIME_WAIT状态。 在怀疑端口耗尽的情况下，应用程序或进程将无法释放它已使用的所有端口，并且将保持TIME_WAIT状态。可能还会在同一输出中看到CLOSE_WAIT状态连接;但是，CLOSE_WAIT状态是 TCP 对等方的一端没有更多数据要发送 (FIN 发送) 但能够接收来自另一端的数据的状态。 此状态不一定表示端口耗尽。在管理员模式下打开命令提示符，并运行以下命令。Netsh trace start scenario=netconnection capture=yes tracefile=c:\Server.etl首先查看 netstat 输出。 如果使用 Windows 10 或 Windows Server 2016，则可以运行 命令netstat -anobq，并检查包含最大条目作为 BOUND 的进程 ID。 或者，还可以运行以下 PowerShell 命令来标识进程：Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name="ProcessName";Expression={(Get-Process -PID ($_.Name.Split(',')[-1].Trim(' '))).Name}}, Group | Sort Count -Descending