Hyper-v悄悄占用端口引发的各种灵异事件
事件记录
装了Hyper-v之后,电脑间歇性出现了一些灵异事件,包括但不限于:
- Intellij、Creoson、Springboot程序等间歇性出现无法绑定端口的问题——这使我一度以为这是Java除了什么问题;
- 如果开机后立即操作启动这些程序,则多半不会出问题;如果开机先干别的事情,则多半会出问题——“多半”;
- 比如一个编译好的Springboot程序或者Creoson,8080端口不行,改到8081也无济于事;9056不行,9080也不行;这更是我相信是Java整体出问题了,但后来发现8080改到18081就好了;
netstat
或者TCPView
毛都看不出来。
磕磕绊绊用了一段时间后,发现问题其实是Hyper-v搞出来的,原因是Hyper-v会占据多个范围的端口保留给自己。
解决办法
- 查看占用范围
# 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