XAMPP 多端口后本地端口耗尽?看 TIME_WAIT 和动态端口范围

XAMPP 多端口后本地端口耗尽?看 TIME_WAIT 和动态端口范围

一、两类端口要分清

类型用途例子
监听端口服务端接收连接Apache 的 80、8081
临时(动态)端口出站连接源端口PHP 连 MySQL/API/Redis 时随机分配

Windows 默认动态端口约 49152–65535(约 16384 个)。

二、多端口怎么加速耗尽

每开一个 Listen 端口,对应项目就多触发后端连接:一个 PHP 页面可能同时查 MySQL、调接口、读 Redis,单次请求吃掉好几个临时端口。并发一高或频繁刷新,端口迅速被占。更麻烦的是连接关闭后并不立刻释放,而是进入 TIME_WAIT(Windows 默认 120 秒),期间不能复用。临时端口全占满后,新的出站连接分不到源端口,就报"无法分配地址"。

三、用命令定位

netstat -ano 看每条约话状态(LISTENING/ESTABLISHED/TIME_WAIT)
Get-NetTCPConnection | Group-Object State | Select-Object Name, Count 统计各状态数量

若 TIME_WAIT 长期几百上千、且本地端口集中在 49152 之后,基本可判定临时端口耗尽。再按进程 ID 找出消耗最多的(通常是 Apache/MySQL/PHP-CGI)。

四、修复方案

  • 扩大动态端口范围:调整 Windows 动态端口起止,缓解上限压力。
  • 缩短 TIME_WAIT:调小对应注册表超时(TcpTimedWaitDelay),加快回收。
  • 收敛监听端口:用反向代理(如 Nginx)把多端口收口到少量端口,减少监听面;非必要不疯狂加 Listen。