# Hyper-v悄悄占用端口引发的各种灵异事件 ## 事件记录 装了Hyper-v之后,电脑间歇性出现了一些灵异事件,包括但不限于: 1. Intellij、Creoson、Springboot程序等间歇性出现无法绑定端口的问题——这使我一度以为这是Java除了什么问题; 2. 如果开机后立即操作启动这些程序,则多半不会出问题;如果开机先干别的事情,则多半会出问题——“多半”; 3. 比如一个编译好的Springboot程序或者Creoson,8080端口不行,改到8081也无济于事;9056不行,9080也不行;这更是我相信是Java整体出问题了,但后来发现8080改到18081就好了; 4. `netstat`或者`TCPView`毛都看不出来。 磕磕绊绊用了一段时间后,发现问题[[https://youtrack.jetbrains.com/issue/IDEA-238995|其实是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 ``` [[https://www.jianshu.com/p/7412ff422db6|参考资料:解决 win10 hyper-v 保留端口占用问题]]