首页/网络/网络排障速查/Address already in use 定位与处置
本包目录(235 条)

Address already in use 定位与处置

应用报 bind: Address already in use 有三类成因:端口被别的进程占用、TIME-WAIT 残留、绑定地址不匹配;先定位持有者,再决定复用、重启还是改配置。

网络排障速查网络更新于 2026-10-12

定位与处置

定位与处置
ss -tlnp 'sport = :8080'                  # 谁在监听
lsof -i :8080                             # 精确到进程
ss -tan state time-wait 'sport = :8080'   # TIME-WAIT 残留
sysctl net.ipv4.tcp_tw_reuse net.ipv4.ip_local_port_range
journalctl -u myapp -n 50 --no-pager | tail -20
现象bind(): Address already in use(EADDRINUSE)
类型1另一进程正在监听(含 supervisor 拉起双份实例)
类型2TIME-WAIT 残留且未设置 SO_REUSEADDR
类型3绑定地址冲突:0.0.0.0 与具体 IP,或不同 netns 各有一套端口表
服务重启后偶发此错,多为旧进程退出慢:systemd TimeoutStopSec 内没退干净,新老进程并存。

易错点

  • 习惯性 kill -9 旧进程:子进程或线程仍持有 fd,问题会复发且更难查
  • 忽略 netns/容器维度:宿主机看到的端口占用与容器内不是同一张表

数据来源与参考

  • man 2 bind(EADDRINUSE)
  • man 8 ss
  • Linux 内核文档:tcp_tw_reuse

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌