首页/系统/Linux 内核与性能调优速查/net.ipv4.ip_local_port_range 本地端口范围
sysctl 内核参数72 条

net.ipv4.ip_local_port_range 本地端口范围

本机主动连接可用的本地端口区间,默认 32768-60999(约 2.8 万个);高并发出站(代理、网关、压测客户端)会先耗尽端口。

本地端口范围是什么

net.ipv4.ip_local_port_range 决定本机主动发起连接时,内核可以自动分配哪些本地端口。默认是 32768 到 60999,约 2.8 万个。每个出站连接会占用一个本地端口,短连接密集的机器(代理、网关、爬虫、压测客户端、调用第三方接口的服务)会在短时间内把这些端口用光,内核随即拒绝建连并返回 Cannot assign requested address。它管的是出站端的端口池,不是本机服务的监听端口。

基本信息

参数net.ipv4.ip_local_port_range
默认值32768 60999(两个数字之间用空格或制表符分隔)
写入格式两个数字一起写在同一行,用引号包住整个值避免被拆开
耗尽报错Cannot assign requested address(应用侧常表现为连接建立失败)
保留端口net.ipv4.ip_local_reserved_ports 可把区间内的端口留给指定服务
相关参数net.ipv4.tcp_tw_reuse、net.ipv4.tcp_max_tw_buckets

典型使用场景

  • 正向代理与出站网关:并发出站请求量大,本地端口周转不过来导致大面积建连失败
  • 压测客户端:用大量短连接压测单个目标时,本地端口最先成为瓶颈而不是被压端
  • 定时任务与批处理:夜间集中跑同步任务时偶发连接失败,白天却正常
  • 上云迁移后容量下降:云 NAT 网关也会限制每地址的端口与会话数,需要与本地端口一起核对
  • 排查偶发故障:服务日志出现随机建连失败但被调方无任何记录,优先怀疑本地端口耗尽

查看与调整

查看与调整
sysctl net.ipv4.ip_local_port_range            # 读当前范围
ss -s | head                                   # 各状态套接字汇总,看 TIME_WAIT 与已用端口规模
ss -tan state time-wait | wc -l                # TIME_WAIT 数量,判断端口是否被长期占住
netstat -an | grep -c ':\[::\]'                 # 兼容老系统时的粗查方式
sysctl -w net.ipv4.ip_local_port_range="1024 65535"   # 临时扩大范围
sysctl net.ipv4.ip_local_reserved_ports        # 确认是否有保留区间需要避开

落盘与回读

落盘与回读
# /etc/sysctl.d/99-net-tuning.conf
net.ipv4.ip_local_port_range = 1024 65535   # 扩大出站端口池,注意避开业务固定端口
# 与出站端口池配套的常见调整
net.ipv4.tcp_tw_reuse = 1                   # 允许安全复用 TIME_WAIT 端口
# 回读命令:sysctl net.ipv4.ip_local_port_range

端口耗尽判断

观察点含义正常与异常
Cannot assign requested address建连时无可用本地端口出现即要处理,属确定性故障信号
ss -s 的 TIME_WAIT 行处于 TIME_WAIT 的套接字数数量接近端口池总量时说明池子被占住
本地端口分布出站连接占用端口的集中区间集中在高位区间说明确实在消耗临时端口池
对端分布连接集中到少数目标地址单目标高并发时端口池实际可用量会明显小于总数
端口能否复用取决于四元组(本地地址、本地端口、远端地址、远端端口)是否冲突。连接到同一个目标时,可选的本地端口数就是端口池大小;分散到多个目标时同一个本地端口可以同时出现多条连接,这就是为什么端口耗尽的故障往往集中在少数目标上。
扩大范围前先确认不与业务固定监听端口冲突,也不要与 ip_local_reserved_ports 里保留的区间重叠。习惯上把下限放在 1024 以上,避免与特权端口及常见服务端口混杂,便于日后排查看图。
端口耗尽通常是组合问题而不是单一参数问题:调用方短连接模式加上目标集中,再叠加 60 秒左右的 TIME_WAIT,才把池子耗光。优先手段依次是改长连接与连接池、允许安全复用、最后才是扩大端口池。
云环境还有一层约束:经过 NAT 网关出公网时,网关侧对每个弹性地址的会话数与端口也有限制,本地扩端口池后仍可能在建连高峰失败。此时需要增加出口地址或拆分流量,而不是继续调内核参数。
压测机上把范围开到 1024 到 65535 会产生大量随机源端口流量,若经过安全设备或防火墙,可能触发端口扫描类告警。变更前先与网络安全侧确认,避免测试流量被拦截或引发误报。

易错点

  • sysctl -w 写入时不加引号:两个数字被当成两个参数或值被截断,参数写入失败却不易察觉,务必回读确认
  • 只扩端口池不改连接模式:短连接风暴下端口仍会被快速耗尽,长连接与连接池才是根治方向
  • 把端口耗尽当成网络故障:报错在应用日志里,被调方毫无记录,容易误判为链路问题而浪费时间
  • 忽略 TIME_WAIT 的占用:不做复用也不改连接模式时,端口释放速度跟不上创建速度
  • 下限设得过低与业务端口重叠:随机分配到被服务占用的端口会造成偶发建连失败,排查成本很高

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/net.rst
  • man 7 ip
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌