windows端口被占用,无法通过netstat找到进程,占用的端口又不能修改,该怎么办?

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 项目运行时服务器8080端口被占用,常规`netstat`命令找不到占用进程。解决方法包括:1) 强制关机重启释放端口;2) 使用`netstat -anobq`或Windows 10的`Get-NetTCPConnection` PowerShell命令查找BOUND状态的进程;3) 调整Windows动态端口范围,避免冲突。注意,强制关机可能影响数据安全。

最近遇到一个奇葩的问题,项目跑的好好的,没有安装其它特殊软件,突然服务器启动报错,日志如下,显然是服务器的8080端口占用了。

Caused by: java.net.BindException: Address already in use: bind
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:438)
        at sun.nio.ch.Net.bind(Net.java:430)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:225)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:218)
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:194)
        at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1328)
        at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1341)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:241)
        at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:695)
        at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11

很多同学容易想到的常规解决方法(windows上)就是使用如下命令找到对应的pid,然后进行关闭

netstat -ano | findstr :8080

但是我这边用这个命令每次的结果都是空白的,也就是无法找到占用8080端口的进程。

那么windows端口占用,netstat无法找到,我们一般可以有哪些简单和行之有效的解决方法呢?

方法1 强制关机

!!!就是按住电源键5秒以上,系统断电。
有同学问为啥正常关机不就好了吗?实际上也是经验所得,正常关机有些进程会缓存下来,占用的端口也会在重启后立马就重新占用。但是强制关机所有的进程及程序缓存都会失效。

方法2 netstat 并使用windows10新增参数-q

通过查阅官网资料,从windows10开始,新增了一个-Q的参数能够查询出一种BOUND状态下的进程,笔者无法找到的进程就是这种状态的。
同时官网也推荐了使用powershell的Get-NetTCPConnection命令来找到对应的程序进程。

使用示例:
netstat -anobq | findstr :8080


官网资料:
Netstat has been updated in Windows 10 with the addition of the -Q switch to show ports that have transitioned out of time wait as in the BOUND state. An update for Windows 8.1 and Windows Server 2012 R2 has been released that contains this functionality. The PowerShell cmdlet Get-NetTCPConnection in Windows 10 also shows these BOUND ports.

Until 10/2016, netstat was inaccurate. Fixes for netstat, back-ported to 2012 R2, allowed Netstat.exe and Get-NetTcpConnection to correctly report TCP or UDP port usage in Windows Server 2012 R2. See Windows Server 2012 R2: Ephemeral ports hotfixes to learn more.

方法3 修改windows动态端口范围

有一些更新可能会使可使用端口的范围有变化,比如Hyper-v
可使用如下命令更新保留端口范围,保留端口范围应该包含你使用端口

netsh interface ipv4 show excludedportrange protocol=tcp

net stop winnat

net stop LanmanWorkstation

net stop WlanSvc

net stop WwanSvc

netsh int ipv4 add excludedportrange protocol=tcp startport=8080 numberofports=1

net start winnat

net start LanmanWorkstation

net start WlanSvc

net start WwanSvc

使用如下命令更新动态端口范围,该范围应该在你使用的端口范围外

netsh int ipv6 show dynamic tcp
netsh int ipv4 set dynamic tcp start=9001 num=16384
目录
相关文章
|
3月前
|
Linux 虚拟化 Windows
Linux、Windows上还不会端口映射的网工,请低调看过来!
Linux、Windows上还不会端口映射的网工,请低调看过来!
115 0
|
1月前
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
33 1
|
3月前
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
|
3月前
|
Windows
Windows中如何查看被占用的端口、杀掉对应的进程
这篇文章介绍了在Windows系统中如何查看被占用的端口号以及如何杀掉占用端口的进程,包括使用命令提示符的`netstat -ano | findstr 端口号`命令查找进程PID,然后通过任务管理器或`taskkill /PID PID号`命令来结束进程。
Windows中如何查看被占用的端口、杀掉对应的进程
|
3月前
|
Kubernetes 网络协议 网络安全
在K8S中,如果不能在容器内部使用netstat查看端口号的情况下,还有其他方式吗?
在K8S中,如果不能在容器内部使用netstat查看端口号的情况下,还有其他方式吗?
|
5月前
|
Windows
windows端口冲突解决办法
windows端口冲突解决办法
162 1
windows端口冲突解决办法
|
3月前
|
JavaScript Windows
NodeJs——如何获取Windows电脑指定应用进程信息
NodeJs——如何获取Windows电脑指定应用进程信息
114 0
|
3月前
|
Windows
Windows——80端口被系统占用
Windows——80端口被系统占用
71 0
|
3月前
|
Linux Windows
Windows查找监听端口对应的进程及其路径
Windows查找监听端口对应的进程及其路径
111 0
|
4月前
|
网络协议 Linux
云服务器内部端口占用,9090端口已经存在了,如何关闭,Linux查询端口,查看端口,端口查询,关闭端口写法-netstat -tuln,​fuser -k 3306/tcp​
云服务器内部端口占用,9090端口已经存在了,如何关闭,Linux查询端口,查看端口,端口查询,关闭端口写法-netstat -tuln,​fuser -k 3306/tcp​