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


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

    壹、原因分析

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

    netsh int ipv4 show dynamicport tcp

    Microsoft Windows [版本 10.0.18363.752]
    (c) 2019 Microsoft Corporation。保留所有权利。
    
    C:UsersChirius>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:UsersChirius>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:UsersChirius>netsh winsock reset
    

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

    叁、终极解决

    3.1 关闭Hyper-V

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

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

    3.2 修改动态端口范围

    使用管理员身份运行cmd

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

    然后检查结果

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

    3.3 开启Hyper-V

    C:WINDOWSsystem32>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
    

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


    薏米笔记

  • 相关阅读:
    Lambda表达式的演变
    反射小例
    进程外Session
    页面缓存的几种方式
    数据缓存的几种方式
    Session
    Cookie
    AJAX学习
    验证码的实现
    ASP.NET动态显示数据的两种方式
  • 原文地址:https://www.cnblogs.com/eelve/p/12679125.html
Copyright © 2020-2023  润新知