3

Hyper-V和IDEA运行端口占用问题

 1 year ago
source link: https://eelve.com/archives/hypervvsidea
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前面的话】因为安装Windows版本的Docker环境,开启了Hyper-V。其结果是导致了IDEA在运行Tomcat的时候提示1099端口占用,经过探索之后成功找到了解决方案。

壹、原因分析

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

netsh int ipv4 show dynamicport tcp

Microsoft Windows [版本 10.0.18363.752](c) 2019 Microsoft Corporation。保留所有权利。 C:\Users\Chirius>netsh int ipv4 show dynamicport tcp 协议 tcp 动态端口范围---------------------------------启动端口        : 1024端口数          : 13977

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

netsh interface ipv4 show excludedportrange protocol=tcp

C:\Users\Chirius>netsh interface ipv4 show excludedportrange protocol=tcp协议 tcp 端口排除范围 开始端口    结束端口----------    --------      1026        1125      1226        1325      1326        1425      1426        1525      1526        1625      2180        2279

我们可以看到IDEA运行Tomcat需要JMX的1099端口刚好在端口排除范围中,这样就导致了IDEA需要使用1099端口是会被占用,这样你当然就不能运行了。

贰、解决方法

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

C:\Users\Chirius>netsh winsock reset

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

叁、终极解决

3.1 关闭Hyper-V

Microsoft Windows [版本 10.0.18363.752](c) 2019 Microsoft Corporation。保留所有权利。 C:\WINDOWS\system32>dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

或者采用传统方式,在控制面板的“程序和功能”中,找到“Windows功能”,取消Hyper-V的勾选。这两种方法都会要求重启。

3.2 修改动态端口范围

使用管理员身份运行cmd

C:\WINDOWS\system32>netsh int ipv4 set dynamicport tcp start=49152 num=16383确定。  C:\WINDOWS\system32>netsh int ipv4 set dynamicport udp start=49152 num=16383确定。

然后检查结果

C:\Users\Chirius>netsh int ipv4 show dynamicport tcp 协议 tcp 动态端口范围---------------------------------启动端口        : 49152端口数          : 16383

3.3 开启Hyper-V

C:\WINDOWS\system32>dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All 部署映像服务和管理工具版本: 10.0.18362.1 映像版本: 10.0.18363.752 启用一个或多个功能[==========================100.0%==========================]操作成功完成。重新启动 Windows 以完成该操作。是否立即重新启动计算机? (Y/N)
开启Hyper-V

或者采用传统方式,在控制面板的“程序和功能”中,找到“Windows功能”,取消Hyper-V的勾选。这两种方法都会要求重启。

后面的话】使用终极解决方案解决之后,你会发现你的IDEA又可以正常运行了。另外这里说一个单独排除端口的命令,后面可能会用到:

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

使用上面的命令之后我们就可以单独排除某个端口了,保障改端口不会被其他应用占用。


薏米笔记

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK