要被 WSL 搞疯了

使用 WSL 开发调试项目,项目主要用 java、vue,java的各个微服务、nacos都部署在局域网的一台服务中(8.150)。现在把各个微服务都使用docker compose部署到这台服务器中。

debug A服务时把通过nacos下线服务器上运行的A服务,调试过程中时不时发现 Fegin 调用超时,但是也有正常的时候,刚开始怀疑是nacos的策略多少有点问题没去管,现在本地开前端工程,也出现接口频繁调用超时,这才怀疑是其他原因,通过debug也看到nacos负载均衡拿到的ip是正确的。

直观现象是同时进行 ping、nc 检测,ping一直是通的,循环执行 nc -vz -w2 192.168.8.150 9999 会出现无规则断断续续的现象

 while true; do     nc -vz -w2 192.168.8.150 9999;     sleep 1; done
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
nc: connect to 192.168.8.150 port 9999 (tcp) timed out: Operation now in progress
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!
Connection to 192.168.8.150 9999 port [tcp/*] succeeded!

目前使用的 .wslconfig

[wsl2]
# WSL 与 Windows 使用同一网络
networkingMode=mirrored
# 内存限制
memory=16GB
# CPU数量
processors=4
# Swap
swap=4GB
# DNS增强
dnsTunneling=true
# Windows防火墙集成
firewall=false
# Docker/虚拟化支持
nestedVirtualization=true

[experimental]
# 自动回收WSL缓存内存
autoMemoryReclaim=gradual
# 使用稀疏虚拟磁盘
sparseVhd=true

已做的尝试:

  1. 在 WSL 中直接curl 8.150 的接口(一样频繁出现超时现象)
  2. 更改 windows 网关(原来是使用旁路由的形式,改为主网关一样)
  3. 在旁路由的终端持续 nc 检测正常,局域网内其他服务器 nc 检测正常
  4. 更改 WSL 网络各个配置,当关闭 localhost转发时的确不会出现超时(但是这就不能访问npm run dev 起来的网页了)
  5. 重置Windows的网络,并重启

主要想要解决的问题是:WSL中访问局域网内其他服务器的接口地址,频繁超时
有没了解的佬,指点下还要怎么处理或排查

看不懂
跟我的codex gpt-5.6-sol MAX说去吧

网络使用桥接模式,不要使用mirrored

使用桥接模式的话注册到 nacos 那边就是 私有ip了,手动指定就要在宿主机加一个抓发了(或者有其他方式?),其他部署在服务器的微服务访问不过来

佬再把主楼内容过一遍,组织组织语言。目前看得我云里雾里 :distorted_face:

尝试过了,扯得有点多,也不靠谱,都给了几份错误的配置

现在的SSH客户端如果没AI助手.我都不会用了~哈哈哈哈

:sob: 一句话就是:WSL中访问局域网内其他服务超时

让GPT去查吧,GPT查这种问题一查一个准

mirror 模式网络是真容易出问题,我都是用 net 模式

docker 使用 docker desktop, 不在 wsl 内部直接安装, docker desktop 可以集成给 WSL 使用

后续调整docker desktop 的端口映射就可以让服务被局域网的其他设备访问了

还是这台设备,非wsl环境访问相同的局域网其他服务超时吗

佬的问题是 本地机器WSL中访问不通 局域网主机内的微服

先确认下,在windows宿主机下访问这些服务有问题吗?

本机打开服务器(8.150)的 swagger 网页,直接调用,一次都没碰到超时。

通过 Test-NetConnection 命令检测10多次,有发现一次超时

提个疑问点,docker-compose那边是新建一个网络供你的服务组网吗?会不会是这里的问题
下面这个章节内的

目前看来,宿主机也会有超时的现象。(通过频繁 Test-NetConnection 发现)

习惯就好

我只能说wsl承受了太多。。 :bili_040:

检查流量的走向,分析卡在那一步。

可以做下其他尝试

  1. 代理是否开了Tun模式,关闭代理试试
  2. 看下环境变量是否设置了http_proxy,https_proxy, 如果有 取消试试