小服务器端口被占了?三步定位谁在占用

举报
yd_230305343 发表于 2026/11/11 09:52:48 2026/11/11
【摘要】 服务起不来,报错里常有一句「address already in use」——端口被占了。端口就像房间号,一个端口同一时间只能住一个程序。谁占了它、怎么腾出来,三步就够。第一步:先看是谁在占Linux 上查端口占用最顺手的是 ss 命令:ss -tlnp | grep 8080-t 是 TCP,-l 只看监听中的,-n 不解析名字(快),-p 显示是哪个进程。输出里能看到占用 8080 的进...

服务起不来,报错里常有一句「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 托管。端口冲突看着吓人,其实多数时候只是上次的进程没收好尾。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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