前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WIN10修改Hyper-V动态端口范围

WIN10修改Hyper-V动态端口范围

作者头像
用户5746037
发布2022-05-18 12:15:05
1.6K0
发布2022-05-18 12:15:05
举报
文章被收录于专栏:web服务器web服务器

WIN10修改Hyper-V动态端口范围

问题现象

因为使用Windows 10中的WSL 2功能需要启用Hyper-V,其结果是导致了IDEA在启动的时候提示端口被占用。

错误信息如下:

代码语言:javascript
复制
Internal error. Please refer to http://jb.gg/ide/critical-startup-errors

java.net.BindException: Address already in use: bind
    at java.base/sun.nio.ch.Net.bind0(Native Method)
    at java.base/sun.nio.ch.Net.bind(Net.java:461)
    at java.base/sun.nio.ch.Net.bind(Net.java:453)
    at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
    at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:132)
    at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:551)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1345)
    at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:503)
    at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:488)
    at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:984)
    at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:247)
    at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:355)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:416)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:515)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at java.base/java.lang.Thread.run(Thread.java:834)

首先查看一下我们系统默认的端口占用范围;

代码语言:javascript
复制
netsh int ipv4 show dynamicport tcp

结果如下:

代码语言:javascript
复制
Microsoft Windows [版本 10.0.19041.388]
(c) 2020 Microsoft Corporation. 保留所有权利。

C:\Users\Test>netsh int ipv4 show dynamicport tcp

协议 tcp 动态端口范围

启动端口 : 1024
端口数 : 13977

我们可以看到Windows系统默认的 TCP 动态端口范围为:1024~13977。当我们开启Hyper-V后,系统默认会分配给一些保留端口供Hyper-V 使用:

代码语言:javascript
复制
netsh interface ipv4 show excludedportrange protocol=tcp

结果如下:

代码语言:javascript
复制
C:\Users\Test>netsh interface ipv4 show excludedportrange protocol=tcp

协议 tcp 端口排除范围

开始端口 结束端口

1026 1125
1226 1325
1326 1425
1426 1525
1526 1625
2180 2279
... ...

IDEA需要在端口6942~6991间找到一个可用端口并绑定(bind),往后面看可以看到端口这个端口范围在排除范围内

这样就导致了IDEA需要使用的端口是被占用,这样你当然就不能运行了。

处理方案
方法一:重置端口

使用管理员身份运行cmd,重置端口,然后重启

代码语言:javascript
复制
netsh winsock reset

这样你的tcp端口排除范围可能刚好不包含1099端口,这样你当然就可以用你的IDEA运行Tomcat应用了。但是你啥时候会出现就不得而知了。

方法二:修改动态端口范围(推荐)

以下步骤需要使用管理员权限操作

关闭Hyper-V

代码语言:javascript
复制
# 关闭Hyper-V
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

修改动态端口范围

使用管理员身份运行cmd

代码语言:javascript
复制
# 设置动态端口TCP范围
netsh int ipv4 set dynamicport tcp start=51555 num=13980
# 设置动态端口UDP范围
netsh int ipv4 set dynamicport udp start=51555 num=13980

然后检查修改结果

代码语言:javascript
复制
# 查看动态端口范围
netsh int ipv4 show dynamicport tcp

输出结果如下:

代码语言:javascript
复制
协议 tcp 动态端口范围

启动端口 : 51555
端口数 : 13980

开启Hyper-V

代码语言:javascript
复制
# 启用Hyper-V
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

输出结果如下:

代码语言:javascript
复制
部署映像服务和管理工具
版本: 10.0.18362.1

映像版本: 10.0.18363.752

启用一个或多个功能
[100.0%]
操作成功完成。
重新启动 Windows 以完成该操作。
是否立即重新启动计算机? (Y/N)
常用操作
代码语言:javascript
复制
# 禁用Hyper-V
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
# 启动Hyper-V
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

# 显示动态端口范围
netsh int ipv4 show dynamicport tcp
# 显示例外端口范围
netsh interface ipv4 show excludedportrange protocol=tcp

# 设置动态端口TCP范围
netsh int ipv4 set dynamicport tcp start=51555 num=13980
# 设置动态端口UDP范围
netsh int ipv4 set dynamicport udp start=51555 num=13980

# 添加例外端口
netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=33a774wt5yqs0

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WIN10修改Hyper-V动态端口范围
    • 问题现象
      • 处理方案
        • 常用操作
        相关产品与服务
        命令行工具
        腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档