端口被占用先别急着杀进程:用 ss 和 lsof 把占用讲清楚

举报
yd_294877891 发表于 2026/10/29 11:19:50 2026/10/29
【摘要】 启动服务时最常见的报错之一就是端口被占用。很多人第一反应是找个进程号杀掉,端口是空出来了,但原来的服务也可能被误杀,或者新服务起来后旧问题又冒出来。先把占用讲清楚再动手,顺序不能反:先确认是谁在用这个端口,再判断该不该动它。第一步是用 ss 看监听状态。ss -tlnp 可以列出当前正在监听的 TCP 端口、监听地址和对应的进程。先看端口号对不对,再看监听地址:只监听在 127.0.0.1 ...

启动服务时最常见的报错之一就是端口被占用。很多人第一反应是找个进程号杀掉,端口是空出来了,但原来的服务也可能被误杀,或者新服务起来后旧问题又冒出来。先把占用讲清楚再动手,顺序不能反:先确认是谁在用这个端口,再判断该不该动它。

第一步是用 ss 看监听状态。ss -tlnp 可以列出当前正在监听的 TCP 端口、监听地址和对应的进程。先看端口号对不对,再看监听地址:只监听在 127.0.0.1 上的服务只能本机访问,监听在 0.0.0.0 上才是对外开放。很多“服务起了却连不上”其实不是端口被占,而是监听地址写错了,杀进程解决不了这个问题。

第二步是用 lsof 或 ss 的进程信息确认归属。拿到占用端口的进程号后,先看它是什么程序、是谁启动的、启动命令是什么。一个端口可能被开发时顺手起的测试服务占着,也可能被系统服务或另一个正式应用占着。测试服务可以停,正式服务要先确认有没有人在用、停掉会不会影响线上业务。只看端口号不看归属就杀进程,是最容易出事故的一步。

第三步是区分冲突和残留。端口冲突是两个服务都想用同一个端口,这时要改的是其中一个的配置,而不是反复杀进程抢端口。残留占用则是旧进程没退出干净,或者父进程死了、子进程还占着端口,这时要先找到真正的持有者,处理完再启动新服务。如果每次重启都会复发,问题往往在启动脚本或服务配置里,而不是在端口本身。

第四步是动手前留好退路。停进程之前先记下进程号、启动命令和配置文件位置;如果不确定,先用 systemctl status 看看它是不是系统服务,系统服务优先用 systemctl stop 而不是直接 kill。改端口配置时,先确认新端口没有被别的服务占用,也没有被防火墙或安全组拦住,否则改完还是连不上。

最后养成两个习惯:一是服务启动时把端口写进配置和文档,不要只记在某台机器的命令行历史里;二是部署前先用 ss 检查一遍目标端口是否空闲。端口问题很少是孤立的报错,它背后往往是两个服务撞到了一起,或者一次没清理干净的旧进程。先查监听、再认归属、最后才动手,服务起不来的排查才不会越修越乱。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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