启动项目时最常见的报错之一就是 Web server failed to start. Port 8080 was already in use。端口被占用的排查方法有不少,这里对比三种常用方式,并给出各自的适用场景。
方式一:netstat + tasklist(最通用)
Windows 自带的 netstat 是老牌方案,任何版本都能用:
netstat -ano | findstr :8080
输出最后一列是 PID,再用 tasklist 查进程名:
tasklist | findstr 12345
确认后结束进程:
taskkill /PID 12345 /F
优点:无需任何安装,CMD 里直接敲。
缺点:三步才能定位到进程名,输出列靠肉眼对齐,脚本里用 findstr 过滤还容易把 :80808 之类的端口也匹配进来(建议用 :8080 带空格或正则边界)。
方式二:PowerShell 的 Get-NetTCPConnection
Windows 10/11 自带的 PowerShell cmdlet,一条命令出结构化结果:
Get-NetTCPConnection -LocalPort 8080 -State Listen |
Select-Object LocalPort, OwningProcess,
@{Name="ProcessName";Expression={(Get-Process -Id $_.OwningProcess).ProcessName}}
优点:结构化输出,PID 和进程名一次拿到,适合写脚本批量处理。
缺点:命令长、难记;只支持 TCP,UDP 端口要换 Get-NetUDPEndpoint;在旧版 PowerShell 上部分参数行为有差异。
方式三:DXTool 占用排查(最省事)
如果经常遇到这类问题,可以用 大雄工具 DXTool 的「占用排查」功能:输入端口号,直接列出进程名、PID、启动路径,点一下就能结束进程,不用记任何命令。
优点:图形界面一步到位,还能查文件被哪个进程占用。 缺点:需要安装 EXE,不适合在服务器等无法安装软件的环境。

怎么选
| 场景 | 推荐方式 |
|---|---|
| 临时排查一次、不想装东西 | netstat |
| 要写进自动化脚本 | PowerShell |
| 每天都遇到、追求效率 | DXTool |
另外提醒一个常见误区:改端口不是解决问题,是绕开问题。如果是自己上一个实例没关干净,养成先查清楚再动手的习惯,否则端口会越改越乱。