Hyper-v悄悄占用端口引发的各种灵异事件

装了Hyper-v之后,电脑间歇性出现了一些灵异事件,包括但不限于:

  1. Intellij、Creoson、Springboot程序等间歇性出现无法绑定端口的问题——这使我一度以为这是Java除了什么问题;
  2. 如果开机后立即操作启动这些程序,则多半不会出问题;如果开机先干别的事情,则多半会出问题——“多半”;
  3. 比如一个编译好的Springboot程序或者Creoson,8080端口不行,改到8081也无济于事;9056不行,9080也不行;这更是我相信是Java整体出问题了,但后来发现8080改到18081就好了;
  4. netstat或者TCPView毛都看不出来。

磕磕绊绊用了一段时间后,发现问题其实是Hyper-v搞出来的,原因是Hyper-v会占据多个范围的端口保留给自己。

  1. 查看占用范围
# powershell 

# 查看系统默认端口占用访问
netsh int ipv4 show dynamicport tcp 

协议 tcp 动态端口范围
---------------------------------
启动端口        : 1024
端口数          : 13977

# 查看hyper-v启动后的保留端口范围
netsh interface ipv4 show excludedportrange protocol=tcp

协议 tcp 端口排除范围
 
开始端口    结束端口
----------    --------
      1026        1125
      1226        1325
      1326        1425
      1426        1525
      1526        1625
      2180        2279
... 
# 通过这个可以查看被占用的项目端口是否在这个范围内

2. 暂时禁用Hyper-v:需要先关闭hyper-v, 可以win+s 快捷键搜索 “windows功能” ,关闭hyper-v,或者使用下列命令,然后重启:

# powershell / cmd
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

3. 配置ipv4动态端口 / 或者配置需要的端口不被占用

# powershell / cmd 管理员权限
# start 起始端口  num 表示可用端口数     按自己的需求来
netsh int ipv4 set dynamicport tcp start=30000 num=16383

# 排除ipv4动态端口占用 startport 起始端口 numberofports 端口数
netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1

4. 重启hyper-v

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

参考资料:解决 win10 hyper-v 保留端口占用问题

  • 最后更改: 2020/09/20 02:00