小服务器端口被占了?三步定位谁在占用
服务起不来,报错里常有一句「address already in use」——端口被占了。端口就像房间号,一个端口同一时间只能住一个程序。谁占了它、怎么腾出来,三步就够。
第一步:先看是谁在占
Linux 上查端口占用最顺手的是 ss 命令:
ss -tlnp | grep 8080
-t 是 TCP,-l 只看监听中的,-n 不解析名字(快),-p 显示是哪个进程。输出里能看到占用 8080 的进程名和 PID。如果机器上没有 ss,用 netstat -tlnp 效果一样。先确认「到底有没有人占」——很多时候是服务自己已经跑了一份,重复启动才报错,查完就知道不用折腾。
第二步:分清是「自己人」还是「外来户」
查到占用者之后分两种情况:
- 是你自己的另一个服务(比如上次启动的旧进程没关干净):直接停掉旧的再启动,问题就解决了。先 kill 进程,再确认端口空出来,再起新服务。
- 是系统服务或其他程序(比如 80 端口被 Apache 占着,你想跑 nginx):这时候别急着杀进程——先想清楚要不要共存。两个选择:要么把新服务改到别的端口(比如 8080 改 2053),要么停掉不需要的那个服务。杀错系统进程可能把别的服务一起拖垮,动手前先看一眼进程名认认人。
第三步:防下次再被占
端口冲突多半是「上次没收尾」造成的,三个习惯能少踩很多坑:
- 启动脚本里先检查端口是否空闲,空了再启动,别闷头重复起;
- 服务配置里把端口写死在配置文件里,别靠启动参数临时指定——参数一换就忘了,冲突就是这么来的;
- 重要的服务用 systemd 托管:崩了自动拉起、重复启动会被 systemd 拦住,不会悄悄起两份。
一个清单
下次再看到 address already in use,按这个顺序来:ss 查占用者、认清是自己人还是外来户、决定杀进程还是换端口,最后把服务交给 systemd 托管。端口冲突看着吓人,其实多数时候只是上次的进程没收好尾。
- 点赞
- 收藏
- 关注作者
评论(0)