Linux 端口被占用排查完整流程:ss、lsof 和端口切换
来源:17golang原创
时间:2026-06-16 10:33:50 335浏览 收藏
Linux 上部署服务时,端口被占用是高频问题。现象通常很直接:应用启动失败,日志里出现 Address already in use,或者本地访问端口时连到的不是刚启动的服务。
这篇文章不只给一条命令,而是整理一套完整工作流:先确认端口是否在监听,再定位占用进程,接着判断是停止旧服务还是切换端口,最后做访问复查和监控。这样处理一次,后面遇到 8080、3306、6379、9000 等端口冲突都可以套用。
目录
- 目标和边界:先判断冲突类型
- 全流程总览:从启动失败到端口恢复
- 阶段 1:用 ss 确认端口是否监听
- 阶段 2:用 lsof 定位占用端口的进程
- 阶段 3:选择停止旧服务或切换端口
- 推荐工作流:处理端口冲突和复查
- 容易踩坑的地方
- 速查表
目标和边界:先判断冲突类型
端口占用的目标不是“看到一个 PID 就关掉”,而是确认这个端口当前由谁占用、是否属于旧版本服务、是否可以停掉、是否应该改新服务端口。
本文默认你已经能登录目标服务器,并且知道业务期望监听的端口,例如 8080。如果端口属于数据库、缓存或网关服务,处理前要确认依赖关系,避免误停核心服务。
全流程总览:从启动失败到端口恢复
先看整体路线。端口冲突排查可以拆成 5 步:启动失败、检查端口、定位进程、处理冲突、验证恢复。

这条链路的核心判断是:端口监听存在不代表它就是错误服务,必须结合进程名、启动路径、用户、业务归属一起看。
阶段 1:用 ss 确认端口是否监听
目标
先确认目标端口当前是否处于监听状态。端口没有监听时,启动失败可能不是端口冲突,而是配置、权限、依赖连接或环境变量问题。
关键动作
检查 8080 端口监听:
ss -ltnp | grep ':8080'
常见输出类似这样:
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
检查点
| 结果 | 含义 | 下一步 |
|---|---|---|
| 有 LISTEN | 端口已经被某个进程占用 | 定位进程归属 |
| 没有输出 | 端口未监听 | 检查应用启动日志和配置 |
| 监听在 127.0.0.1 | 只允许本机访问 | 确认绑定地址是否符合预期 |
阶段 2:用 lsof 定位占用端口的进程
目标
确认具体是谁占用了端口。只看 PID 不够,还要看进程名、启动用户和业务归属。
关键动作
查看 8080 端口对应进程:
lsof -i :8080
如果输出里看到旧应用、临时测试服务或反向代理进程,就可以继续判断是否应该停旧服务或改新端口。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1234 app 6u IPv4 12345 0t0 TCP *:http-alt (LISTEN)
检查点
- 进程名是否是预期服务。
- 启动用户是否属于当前业务。
- 端口是否被旧版本服务继续占用。
- 端口是否已经被网关、代理或容器映射使用。
阶段 3:选择停止旧服务或切换端口
目标
处理端口冲突时有两个常见分支:如果占用方是旧服务且可以下线,就停止旧服务;如果占用方是合法服务,就修改新应用端口。
关键动作
温和停止已确认可以下线的旧进程:
kill -TERM 1234
如果端口不能释放,通常要先查清是否有守护脚本或进程管理器在拉起旧服务。不要直接反复强杀,先确认是谁在负责重启。
如果端口属于合法服务,更安全的做法是把新应用改到另一个端口,例如 8081,并同步更新网关、健康检查、环境变量和监控配置。
检查点
处理后再查一次监听状态:
ss -ltnp | grep ':8080'
如果你改到了新端口,也要检查新端口:
ss -ltnp | grep ':8081'
推荐工作流:处理端口冲突和复查
下面这张图把处理分支放在一起。关键点是:发现 PID 后不要急着处理,先判断占用方是否应该继续存在。

- 记录启动失败的服务名、端口、时间和错误日志。
- 用
ss -ltnp确认目标端口是否已经监听。 - 用
lsof -i :端口找到占用进程。 - 确认进程归属:旧服务、代理、容器映射、测试程序还是当前服务。
- 根据归属选择停止旧服务或切换新应用端口。
- 用端口监听和接口访问做复查。
复查示例:
curl -s http://127.0.0.1:8081/health
如果返回健康检查结果,再看应用日志没有持续报错,端口冲突这条线就可以关闭。
容易踩坑的地方
- 看到 PID 就停:先确认业务归属,尤其是数据库、缓存、网关端口。
- 只改应用端口:网关转发、健康检查、监控探测也要同步调整。
- 只查 IPv4:部分服务可能监听 IPv6 或只绑定本地地址,访问范围会不同。
- 忽略容器映射:容器场景下要同时看宿主机端口和容器内部端口。
- 没有复查:处理后必须重新检查监听状态和接口响应。
速查表
| 阶段 | 命令或动作 | 判断信号 |
|---|---|---|
| 确认监听 | ss -ltnp | grep ':8080' |
是否存在 LISTEN |
| 定位进程 | lsof -i :8080 |
进程名、PID、用户 |
| 处理冲突 | 停止旧服务或切换端口 | 端口是否释放或新端口是否监听 |
| 复查访问 | curl 健康检查 |
接口是否正常响应 |
| 长期治理 | 更新配置、监控和文档 | 部署不再重复冲突 |
总结一下:端口被占用不是单条命令能彻底解决的问题。按“确认监听、定位进程、判断归属、处理冲突、复查访问”的顺序走,既能快速恢复服务,也能避免误停正在工作的关键进程。
-
248 收藏
-
243 收藏
-
426 收藏
-
360 收藏
-
387 收藏
-
284 收藏
-
286 收藏
-
494 收藏
-
360 收藏
-
108 收藏
-
227 收藏
-
436 收藏
-
187 收藏
-
288 收藏
-
250 收藏
-
280 收藏
-
122 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习