Linux 入门:用 ss 快速查出谁占用了端口

举报
yd_235948304 发表于 2026/11/08 06:25:02 2026/11/08
【摘要】 云主机上部署服务时,最常见的报错之一是 Address already in use:想监听 80、8080 或 3000,却发现端口已被占用。不必先乱杀进程,用系统自带的 ss(iproute2)就能在几秒内定位是谁占着口,比翻 /var/log 或盲目 kill 稳得多。 1. 先看某个端口有没有人听ss -lntp | grep ':8080'参数含义很直接:-l:只看 listeni...

云主机上部署服务时,最常见的报错之一是 Address already in use:想监听 80、8080 或 3000,却发现端口已被占用。不必先乱杀进程,用系统自带的 ss(iproute2)就能在几秒内定位是谁占着口,比翻 /var/log 或盲目 kill 稳得多。

1. 先看某个端口有没有人听

ss -lntp | grep ':8080'

参数含义很直接:

  • -l:只看 listening(正在监听)
  • -n:端口用数字,不做服务名反查,输出更干净
  • -t:只看 TCP;UDP 服务请改用 -u
  • -p:尽量显示进程名和 PID(需要相应权限)

典型输出里会出现 users:(("node",pid=1234,fd=23)),这就是占用进程。如果没有 -p 或权限不够看不到进程名,先记下本地地址和状态,再配合 ps -fp <pid> 继续查。

2. 看本机对外连了哪些端口

排查「连不上下游 API / 数据库」时,除了看监听,也要看 outbound:

ss -ntp | grep ':443'

能快速确认本机是否真的在建连、卡在 SYN-SENT,还是已经进入 ESTAB。若长时间停在 SYN-SENT,多半是安全组、防火墙或对端没通,而不是本机应用逻辑问题。

3. 几个常见坑

  1. 看错协议:服务听的是 UDP,你只查了 TCP。加上 -u:ss -lnup。
  2. IPv4 / IPv6:*:8080 和 [::]:8080 可能是两个监听;只停了一个,另一个仍占口。
  3. 容器网络:宿主机 ss 看到的经常是 docker-proxy 或 CNI 转发,进容器再查一次才是业务进程。
  4. 权限:非 root 时 -p 经常看不到别人的进程名,需要 sudo 或换有权限的账号。
  5. TIME-WAIT 不是占用监听:大量 TIME-WAIT 通常不影响新服务 bind 同一端口(除非开了特殊 reuse 限制),别被吓到。

4. 和 lsof、netstat 怎么选

  • 现代发行版优先 ss,比传统 netstat 更快、信息更全。
  • 需要「哪个文件句柄对应端口」时再用 lsof -i :8080。
  • 写巡检脚本时,ss -lntp 的输出格式相对稳定,比解析 netstat 省心。

5. 定位后怎么处理

确认进程后,按场景处理即可:业务该在跑就改新服务监听端口;是残留进程或旧容器就停掉;是系统服务就 systemctl status 看是否被意外拉起。改端口后记得同步安全组与反向代理配置,避免「进程起来了,外面还是进不来」。

下次再遇到端口冲突,先跑一句 ss -lntp | grep ':端口',确认协议、地址族和进程,再决定改端口、停旧进程还是查容器转发——通常比反复重启服务更快定位根因。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。