端口被占用先别急着杀进程:用 ss 和 lsof 把占用讲清楚
启动服务时最常见的报错之一就是端口被占用。很多人第一反应是找个进程号杀掉,端口是空出来了,但原来的服务也可能被误杀,或者新服务起来后旧问题又冒出来。先把占用讲清楚再动手,顺序不能反:先确认是谁在用这个端口,再判断该不该动它。
第一步是用 ss 看监听状态。ss -tlnp 可以列出当前正在监听的 TCP 端口、监听地址和对应的进程。先看端口号对不对,再看监听地址:只监听在 127.0.0.1 上的服务只能本机访问,监听在 0.0.0.0 上才是对外开放。很多“服务起了却连不上”其实不是端口被占,而是监听地址写错了,杀进程解决不了这个问题。
第二步是用 lsof 或 ss 的进程信息确认归属。拿到占用端口的进程号后,先看它是什么程序、是谁启动的、启动命令是什么。一个端口可能被开发时顺手起的测试服务占着,也可能被系统服务或另一个正式应用占着。测试服务可以停,正式服务要先确认有没有人在用、停掉会不会影响线上业务。只看端口号不看归属就杀进程,是最容易出事故的一步。
第三步是区分冲突和残留。端口冲突是两个服务都想用同一个端口,这时要改的是其中一个的配置,而不是反复杀进程抢端口。残留占用则是旧进程没退出干净,或者父进程死了、子进程还占着端口,这时要先找到真正的持有者,处理完再启动新服务。如果每次重启都会复发,问题往往在启动脚本或服务配置里,而不是在端口本身。
第四步是动手前留好退路。停进程之前先记下进程号、启动命令和配置文件位置;如果不确定,先用 systemctl status 看看它是不是系统服务,系统服务优先用 systemctl stop 而不是直接 kill。改端口配置时,先确认新端口没有被别的服务占用,也没有被防火墙或安全组拦住,否则改完还是连不上。
最后养成两个习惯:一是服务启动时把端口写进配置和文档,不要只记在某台机器的命令行历史里;二是部署前先用 ss 检查一遍目标端口是否空闲。端口问题很少是孤立的报错,它背后往往是两个服务撞到了一起,或者一次没清理干净的旧进程。先查监听、再认归属、最后才动手,服务起不来的排查才不会越修越乱。
- 点赞
- 收藏
- 关注作者
评论(0)