启动项目时最常见的报错之一就是 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

另外提醒一个常见误区:改端口不是解决问题,是绕开问题。如果是自己上一个实例没关干净,养成先查清楚再动手的习惯,否则端口会越改越乱。