端口占用排查核心是“先定位、再确认、后处理”:一、用ss(Linux/macOS)或netstat/PowerShell(Windows)查出占用端口的进程PID及名称;二、结合端口常识与进程路径判断是否合理;三、按需选择终止进程或修改应用端口配置;四、仅LISTEN状态才算真正占用,ESTABLISHED、TIME-WAIT等不构成冲突。

服务器端口占用排查,核心是“先定位、再确认、后处理”。不需要堆砌命令,关键在于每一步都指向明确目标:谁在用?是不是该用?能不能停?要不要改?
一、快速查出哪个进程占了端口
别猜,直接看。不同系统用最稳的命令:
-
Linux/macOS:用
ss -tulnp | grep ':8080'(把 8080 换成你要查的端口)。输出里带users:(("xxx",pid=12345,...))的那行,就说明是进程 xxx、PID 12345 在监听。 -
Windows(CMD):运行
netstat -ano | findstr ":8080",最后一列数字就是 PID;再用tasklist | findstr "12345"查进程名。 -
Windows(PowerShell):更直接,
Get-NetTCPConnection -LocalPort 8080 | Get-Process一步到位显示进程详情。
二、判断这个占用是否合理
看到 PID 和进程名,别急着杀,先看它该不该在这儿:
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
- 常见服务对应端口要心里有数:80/443 → Nginx/Apache,3306 → MySQL,6379 → Redis,8080 → Tomcat/Java 应用,22 → sshd。
- 如果进程名是
java、node、python3这类通用名,就得多看一眼——用ps -fp 12345(Linux)或Get-Process -Id 12345(Win)查完整启动命令,确认是不是你自己的服务没关干净,还是别人部署的程序。 - 路径异常(比如临时目录、隐藏路径)、用户是
root但不是系统服务、CPU/内存占用突高,都要警惕是否恶意占用。
三、按需选择处理方式
不是所有占用都要“一刀切”结束进程:
-
能停就停:确认是测试残留、开发未退出的服务,直接 kill:
kill -9 12345(Linux)或taskkill /PID 12345 /F(Windows)。 -
不能停就改:比如生产环境 MySQL 正在跑,但你的新服务也要用 3306?那就改你的服务配置——Nginx 改
listen 8081,Spring Boot 改server.port=8081,改完重启生效。 -
防复发:部署前加一句
ss -tuln | grep ':8080'检查;用防火墙限制非必要端口暴露;Linux 上可设 systemd 服务自动清理残留(如加Restart=on-failure)。
四、注意状态真假,避免误判
不是所有“出现端口”都等于“被占用”:
-
LISTEN或listening状态才代表真正在监听、真正占用; -
ESTABLISHED是已有连接,不影响新服务绑定; -
TIME-WAIT是连接关闭后的缓冲状态,几秒后自动消失,不用管; - 只看到
UDP占用,但你的服务是 TCP?那也不冲突。

















