1. 背景
最近心痒升级了系统到windows 11,感觉真的很香,接着使用新系统的机会,也接触了一波wsl2(Windows 10已有,但是一直没有使用过),为此也开启了Hyper-V,没想到却出现了一些端口占用的提示,搞得tomcat无法运行了,一波折腾,最终查明了原因并顺利解决。
2. 问题
使用IDEA启动tomcat,总是提示1099端口被占用,大致提示如下:
Error running **: Address localhost:1099 is already in use
3. 处理方案
按照一般处理方法,首先在终端下通过指令查找1099端口的使用情况,结果却发现并未找使用。
netstat -ano | findstr "1099"
一番资料搜集,发现当我们开启Hyper-V后,系统默认会分配给一些保留端口供Hyper-V使用,碰巧1099就被保留了!!!
那么我们只需要让系统不要保留1099端口即可(其他类似问题,也可以用相同方式处理)。
# 禁用Hyper-V
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
# 添加例外端口
netsh int ipv4 add excludedportrange protocol=tcp startport=1099 numberofports=1
# 启动Hyper-V
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
4. 总结
如果碰到类似的端口占用问题,在netstat找不到的情况下,不妨也考虑考虑系统保留的可能性,采用相同的方式,即可顺利解决。
顺便记录下常用操作,方便查阅。
# 禁用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=1024 num=13977
# 设置动态端口UDP范围
netsh int ipv4 set dynamicport udp start=1024 num=13977
# 添加例外端口
netsh int ipv4 add excludedportrange protocol=tcp startport=1099 numberofports=1