用 ss、lsof 定位端口占用与连接异常

举报
yd_236639601 发表于 2026/10/30 10:40:46 2026/10/30
【摘要】 服务起不来,十有八九是端口被占了;接口连不上,先看连接卡在哪一步。ss 和 lsof 是 Linux 上定位这类问题最直接的两把工具,不用装额外软件,几条命令就能把“谁占了端口、连接走到哪了”问清楚。一、先看端口被谁占了ss -tlnp | grep 8080ss -tlnp-t 只看 TCP,-l 只看监听状态,-n 不解析服务名,-p 显示占用进程。输出里看到 LISTEN 和进程名、P...

服务起不来,十有八九是端口被占了;接口连不上,先看连接卡在哪一步。ss 和 lsof 是 Linux 上定位这类问题最直接的两把工具,不用装额外软件,几条命令就能把“谁占了端口、连接走到哪了”问清楚。

一、先看端口被谁占了

ss -tlnp | grep 8080
ss -tlnp

-t 只看 TCP,-l 只看监听状态,-n 不解析服务名,-p 显示占用进程。输出里看到 LISTEN 和进程名、PID,就是占用者;如果输出为空,说明该端口根本没人在监听——服务没起来,或者监听地址写错了(比如只绑了 127.0.0.1,外网自然连不上)。

只知道端口、想反查进程,也可以用 lsof:

lsof -i :8080

它会直接给出命令名、PID、用户和连接状态。找到 PID 后别急着 kill,先确认是不是自己人:ps -fp <PID> 看一眼启动命令和启动时间,误杀生产进程比端口冲突更麻烦。

二、连接异常分三段查

客户端报连接被拒绝(Connection refused),大概率是服务端没监听:先在服务端跑 ss -tlnp 确认端口在监听,再看防火墙有没有放行。报超时(timeout),则先 ping 再看路由和防火墙,超时往往是包被中途丢了,而不是服务没起。

已经建立的连接可以用:

ss -tnp | grep 8080
ss -tn state established

ESTAB 是已建立,TIME-WAIT 大量堆积通常是短连接频繁创建,属于正常回收,别一见 TIME-WAIT 就以为是故障;SYN-SENT 卡住不动,说明握手没完成,重点查服务端是否真的在监听、中间有没有防火墙拦截。

三、几个容易踩的坑

第一,IPv4 与 IPv6:ss -tlnp 里看到 *:8080 和 [::]:8080 不是一回事,服务只绑 v6 时,部分只走 v4 的客户端会连不上,启动参数里把监听地址写明确最稳妥。第二,端口范围:1024 以下端口需要 root 或授权,普通用户起服务报权限错误时,先查是不是抢了低端口,而不是怀疑配置写错。第三,TIME-WAIT 与端口复用:服务重启时报 Address already in use,有时是旧连接还没回收,等几十秒或确认旧进程已退出再重试,别一上来就改端口绕过去,绕过去等于埋了个新坑。

四、一套固定的排查顺序

服务起不来:ss -tlnp 看端口 → lsof -i :端口 找占用者 → ps 确认进程身份 → 再决定杀还是改配置。客户端连不上:先确认服务端在监听 → 再查本机防火墙 → 再查云厂商安全组 → 最后看客户端到服务端的路由。按这个顺序走,大多数端口问题十分钟内就能定位,不用来回猜。

小结

端口问题的核心就一句话:先证明端口到底在谁手里、连接到底卡在哪一步,再动手改配置。ss 看状态、lsof 找进程、ps 确认身份,三条命令组合起来,比重启服务碰运气可靠得多。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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