这类问题我又碰上了一次。服务启动失败,日志里写地址已被占用,重启机器之后依然如此,说明有别的程序抢了同一个端口。
排查方向其实有限,先把可能性排一排。同端口有另一个进程在监听;上一次的进程没有完全退出,句柄还占着;监听地址不同但端口相同,实际并不冲突。
上来先查端口占用进程
ss -lntp | grep 8080
然后确认进程归属和启动方式
ps -o pid,ppid,cmd -p 进程号
结束占用进程或改端口
kill -TERM 进程号
末了重启服务确认绑定成功
systemctl restart app && ss -lntp | grep 8080
中间停过一次,把已经改的东西回滚干净,再重新来一遍。
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
恢复的判定其实很直接。服务正常绑定端口,监听列表里只有预期进程。
端口处于等待状态时也会占着地址,重启服务比等它自然释放快;改端口要同步改防火墙和上游配置。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。