ip_local_port_range 范围用尽后 bind: Address already in use 的进程定位脚本-linux运维

bind: address already in use 错误未必是端口被监听占用,更可能是 ip_local_port_range 耗尽导致 connect() 自动 bind 失败;此时 ss -s 显示 time_wait 数接近端口范围上限,且无对应监听进程。

为什么 bind: Address already in use 不一定是端口真被占了

当看到这个错误,第一反应常是用 netstat -tuln | grep :PORT 或 lsof -i :PORT 查进程,但若问题出在 ip_local_port_range 耗尽,这些命令大概率查不到“占用者”——因为根本没进程在监听那个端口,而是系统找不到可用的临时端口来分配给新连接(比如 connect() 时自动 bind)。此时 ss -s 显示的 tw(TIME_WAIT)数往往异常高,且 /proc/sys/net/ipv4/ip_local_port_range 的范围本身又很窄(如默认 32768 60999,仅约 28K 端口),高并发短连接场景下极易打满。

快速确认 ip_local_port_range 是否已耗尽

执行以下命令组合判断:

cat /proc/sys/net/ipv4/ip_local_port_range
ss -s | grep -i "timewait\|established"

关键看两点:

  • ss -s 中 tw 数量接近或超过 ip_local_port_range 上下界之差(例如 60999 − 32768 + 1 = 28232),基本可判定耗尽
  • 同时 established 数量不高,说明不是长连接占满,而是短连接快速进入 TIME_WAIT 后未及时回收
  • 注意:net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_fin_timeout 的值会影响实际回收速度,但它们不改变端口池大小

定位真正“吃掉”本地端口的进程(非监听型)

真正占端口的是处于 TIME_WAIT、ESTABLISHED、SYN_SENT 等状态的 socket,需按源端口聚合统计。用下面这个一行脚本找出本地端口使用最多的前 10 个进程:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » ip_local_port_range 范围用尽后 bind: Address already in use 的进程定位脚本-linux运维
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4023016+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4023016+
  • 本周更新: 0+
  • 最后更新: 2026-03-16