
打开任务管理器看到WSL进程一股脑吃掉了八九个G内存或者好不容易装好了WSL一打开Ubuntu窗口就黑屏报错又或者在VSCode里连不上WSL环境代码写一半直接卡死。这些场景我基本都踩过而且不只是我身边用WSL的同事、网上求助的帖子翻来覆去就那么几个问题安装不顺、图形界面出不来、内存占用看不懂。所以这篇博文我打算一次性把WSL从安装到日常使用讲透重点放在三块怎么干净利落装好WSL、怎么在WSL里跑图形化界面包括VSCode远程开发、以及怎么对付“WSL狂吃内存”这个老大难。内容基于我自己在Windows 10和Windows 11两台机器上的实际操作记录也整理了一些社区里常见的坑和通用解法。不管你是刚接触WSL的新手还是已经入坑想优化体验的老手这篇都应该有能直接抄作业的部分。1. WSL选型与安装思路拆解1.1 搞清楚WSL1和WSL2的区别再动手很多人一上来就敲命令装系统结果后面遇到性能、网络、跨文件系统访问的问题时完全懵圈。WSL这十几年发展下来目前主流就两个大版本理解它们本质不同很多坑其实可以提前躲开。WSL1是把Linux系统调用翻译成Windows系统调用的一个兼容层它的优势是文件IO性能极高启动速度也非常快而且因为不涉及真正的Linux内核资源占用天然低。但缺点是并不是所有Linux应用都能跑比如Docker这类依赖内核特性的工具在WSL1下就非常别扭内核模块、cgroup这些都没法正常工作。WSL2则在架构上彻底换了思路它是一个运行在轻量级虚拟机里的完整Linux内核兼容性接近真机。Docker、CUDA、systemd这些都能比较顺畅地跑起来。代价就是需要占用一部分内存和CPU资源来做虚拟化也需要主板和系统支持虚拟化技术。用一句话概括日常写代码、做脚本、跑Python项目WSL1够用要跑Docker、装CUDA、折腾底层Linux工具链直接选WSL2别回头。另外说一句版本选择Windows 11用户直接享受WSL的最新特性支持比如WSLgWindows 10 21H2以上也能用WSL2但部分图形功能需要额外配置。文章后面我两种都会讲到。1.2 为什么推荐把WSL2作为日常主力环境我自己从2019年开始用WSL最早是WSL1后来WSL2正式版出来后我很快就把日常开发环境全切了过去。为什么这么坚定说三个最直观的体验。第一是文件访问的路径统一了。以前在Windows上写脚本路径是C:\projects\myapp到服务器上就变成/root/myapp每次都要改配置、改脚本。用WSL2之后Windows和Linux的路径可以互访开发目录直接放在Linux文件系统里在VSCode里打开的是\\wsl$\Ubuntu\home\user\project写出来的代码换到服务器上几乎零成本迁移。第二是环境隔离干净。我早期的开发环境是Windows装了一堆软件Python、Node.js、Redis、MySQL、Docker Desktop……每一个版本升级、依赖冲突都是灾难现场。后来把工具链全部搬进WSL2Windows系统除了VSCode和一个浏览器其他开发工具全卸了整个系统清爽得不像话。第三是更接近生产环境。公司服务器基本都是Linux本地用WSL2开发行为上更贴近线上有些在Windows下正常、到Linux就报错的问题比如路径分隔符、文件权限、行尾符在WSL2里开发阶段就能暴露出来总比上了生产环境再翻车强。当然WSL2也有短板比如跨文件系统访问性能下降明显后面我会专门讲到怎么规避这个坑。2. WSL安装全流程实操2.1 Windows 11与Windows 10一键安装步骤如果你用的是Windows 1122H2以上最省事的方式是直接用管理员权限打开PowerShell或终端输入下面这条命令wsl --install这条命令会自动完成三件事启用WSL功能、启用虚拟机平台功能、下载并安装默认的Ubuntu发行版。装完系统会提示重启重启后再根据终端里的提示创建Linux用户名和密码即可。Windows 10用户同样支持wsl --install但需要系统版本在2004以上。如果你的Windows 10版本较旧或者公司电脑有组策略限制也可能需要手动启用功能。这时候分两步走先用管理员权限执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart这两个命令分别打开WSL功能和虚拟机平台。执行完重启再去Microsoft Store搜索Ubuntu下载安装即可。还有一类特殊场景内网离线环境。公司电脑不允许访问外网或者Microsoft Store被策略禁用了这时候需要用离线安装包。可以在一台能上网的机器上手动下载Ubuntu WSL离线安装包一种.appx或者.appxbundle扩展名的文件拷贝到目标机器上用管理员PowerShell执行Add-AppxPackage命令安装。Ubuntu发行版的官方下载地址在Microsoft的WSL发行版列表中能找到如果不想访问商店这个方式最稳。2.2 遇到wsl --update下载很慢怎么办很多人在执行wsl --install或更新WSL内核时卡在“Downloading”界面进度条像睡着了一样。这问题在国内网络环境下特别常见本质是WSL的更新组件托管在远端服务器上网络延迟或者被干扰都会导致下载极慢。我的建议是分情况处理。第一种情况你已经装好WSL2的内核和发行版只是提示WSL版本太旧需要运行wsl --update。此时可以绕过自动更新手动下载WSL MSI更新包微软官方提供了WSL的独立安装包渠道下载后双击安装即可。装完记得先执行wsl --shutdown再重新打开发行版让新内核生效。第二种情况如果你在wsl --install阶段就卡住那说明基础组件没下载完。可以先看看是不是系统镜像更新服务Windows Update被策略关了或者是DNS解析问题。临时的解决办法就是挂代理下载或者干脆放弃自动安装改用“启用功能加手动装发行版”的老办法先把两个dism命令跑完重启后用离线包安装Ubuntu。这里要特别提醒一句不要觉得离线包麻烦在很多受控环境里手动离线安装反而是最不容易出幺蛾子的路径也能避免“wsl --install太慢”带来的挫败感。2.3 升级迁移老版本WSL怎么平滑过渡如果你之前在Windows 10上用了WSL1后来想升级到WSL2操作也不复杂。先用管理员PowerShell执行wsl --set-default-version 2这会把新建的发行版默认设置为WSL2。对于已经安装的发行版可以单独设置wsl --set-version Ubuntu 2这个转换可能需要几分钟时间转换过程中系统会复制文件系统并做格式转换。注意转换前确保磁盘空间充足建议至少预留发行版当前占用空间1.5倍的余量。转换完成后可以用wsl -l -v查看当前所有发行版的状态确认VERSION列显示为2。跨大版本升级比如从旧版WSL升级到WSL 2.0以上时有时会出现“Your version of Windows Subsystem for Linux (WSL) is too old. Run wsl --update”的提示。这句话的意思是内核组件太老需要更新。在Windows 11上直接运行wsl --update即可如果更新慢参考上面2.2节的方案。3. VSCode远程开发与终端字体优化3.1 在VSCode中使用WSL开发环境热词里“在vscode中使用wsl”出现频率非常高这确实是WSL最实用的玩法之一。VSCode连接WSL后你可以直接在Windows的图形编辑器里写代码但运行、调试、终端操作全都在Linux环境里完成体验非常接近一台远程Linux服务器。做法很简单先在VSCode中安装扩展在扩展市场搜索“Remote Development”这个扩展包会自动包含“Remote-WSL”、“Remote-SSH”、“开发容器”三个扩展直接装这一个就行。装完后VSCode左下角会出现一个绿色的连接按钮也有个远程窗口图标点击后选择“连接到WSL发行版”选你的UbuntuVSCode就会重新打开一个连接到WSL的窗口。这时候有几个细节我要强调一下在WSL窗口里VSCode会自动使用Linux端的扩展而不是Windows端的扩展。比如你在Windows端装了Python扩展但WSL端没装照样不生效。所以进到WSL窗口后要到扩展面板里看看有没有提示“已在WSL中安装”没有的话就在远程端补装。默认情况下VSCode打开WSL窗口时的工作目录是登录用户的主目录也就是/home/你的用户名/。你可以通过命令行参数指定打开目录比如code /home/myuser/myproject。WSL窗口里打开项目时尽量把项目放在Linux文件系统内也就是/home/xxx或者/mnt/wslg这种路径下。我在结尾还会讲到放在/mnt/c/Windows目录下会导致文件IO性能和响应速度明显下降尤其在node_modules、.git这类大量小文件的目录里差别非常明显。3.2 终端字体和字体渲染接近macOS的体验热搜词里有个很具体的需求——“wsl ubuntu写代码最推荐的字体接近macos的体验”。这个问题其实包含两部分字体本身和终端渲染。macOS终端默认使用的等宽字体是SF Mono但它在Windows上不可直接用也不允许直接分发。社区里公认最接近SF Mono质感、又对Windows字体渲染做了优化的替代品有两个JetBrains Mono和Cascadia Code。JetBrains Mono是JetBrains为自己的IDE设计的字体字符细节清晰对无衬线风格的处理非常干净尤其是括号、中划线、斜杠这类代码符号辨识度很高写代码时眼睛很舒服。Cascadia Code则是微软官方的开源终端字体它有个特别之处是支持编程连字Ligatures比如箭头-、不等于!会自动渲染成合并字符看起来比较“有设计感”整体气质也很接近SF Mono的现代感。安装方法并不复杂去Github下载字体文件后右键选择“为所有用户安装”然后在终端或VSCode的字体设置里把字体名改成“Cascadia Code”或“JetBrains Mono”即可。在VSCode里就是editor.fontFamily: Cascadia Code。需要提醒的是字体只解决了字形问题渲染效果和终端工具也很有关系。Windows Terminal的渲染精度已经非常能打了对比macOS的字体抗锯齿观感差距很小前提是关闭文本缩放并开启硬件加速渲染。如果你用的是老款ConHost窗口cmd默认外壳字体渲染会比较粗糙果断换Windows Terminal或VSCode终端。如果你还想更进一步模仿macOS的窗口风格可以给Windows Terminal配置半透明背景视觉效果就更接近了。这个纯属个人审美喜欢简洁的可以跳过。4. WSL2图形化界面安装全解4.1 Windows 11下WSLg图形应用的支持方式很多人以为WSL装了Linux就只能用命令行其实从WSL2开始微软引入了WSLg子系统专门用来在Windows上直接运行Linux图形应用。如果你装的是Windows 11 22H2及以上版本并且通过wsl --install全新安装的发行版WSLg默认是自动启用的。什么意思呢比如你在Ubuntu的WSL环境里安装一个图形界面的编辑器或者浏览器直接在命令行输入命令启动就会弹出Windows窗口界面显示看起来就像原生应用一样。WSLg是通过Wayland和RDP两个后端组合配合实现的底层自动处理了Linux图形协议和Windows显示环境的桥接用户不需要额外安装X服务器。测试WSLg是否正常工作最简单的方法在Ubuntu终端里输入echo $DISPLAY和echo $WAYLAND_DISPLAY如果有输出就说明图形通道已就绪。你也可以装一个小应用验证比如安装geditsudo apt install gedit gedit 如果弹出一个GTK窗口说明WSLg完全正常。需要留意WSLg虽然方便但它对显卡渲染要求不高如果你跑的是比较重的GUI应用像Android Studio模拟器之类性能可能不太理想。这类场景建议还是走Windows原生或者单独搞个真正的虚拟机。轻量级的开发工具和图形化运维工具用WSLg就够了。4.2 传统X Server方案VcXsrv还是X410如果你用的是Windows 10或者WSLg在你的机器上不起作用那就要走传统方案在Windows端运行一个X ServerX服务器WSL端把图形请求转发给这个X Server来显示。这就相当于你在Windows上搭了一个显示服务Linux端应用通过网络协议把界面画出来。常用的开源方案是VcXsrv免费和商业的X410付费但功能更省心。我最早用的是VcXsrv也是社区最推荐的一款安装包可以从SourceForge下载。装好之后启动XLaunch配置时建议选Multiple Windows模式Display number保持默认0勾选Disable access control关闭访问控制这样WSL里的程序可以直接连接。WSL这边的配置只需要设置环境变量在Ubuntu的~/.bashrc末尾添加export DISPLAY$(grep nameserver /etc/resolv.conf | awk {print $2}):0.0 export LIBGL_ALWAYS_INDIRECT1然后执行source ~/.bashrc。对于WSL2这里有个很多人容易踩的大坑WSL2使用NAT网络Linux的IP地址会变localhost在WSL2和Windows之间的互通远不如WSL1那样丝滑。所以DISPLAY变量不能直接写死为localhost:0.0而是要从/etc/resolv.conf里动态读取Windows主机的IP。上面那条命令就是这么干的。X410的优势是它对高DPI缩放和多显示器支持更好如果你外接显示器和4K屏用得比较多X410会省心一些。但如果只是偶尔跑个图形化程序VcXsrv完全够用。4.3 图形化界面相关组件安装与常见坑图形界面能不能用其实还取决于你具体装了哪些包。以Ubuntu为例如果你想跑一套完整的桌面环境需要安装的任务挺重而且体验通常一般我不太推荐在WSL里装整个桌面。但如果你只是想让某些图形程序跑起来那么只需要装对应的GTK或Qt库即可。举个例子很多运维工具是Python写图形界面的比如Xshell的Linux替代方案、某些数据库客户端它们依赖GTK库。如果程序报错说缺少GTK或者Qt库在Ubuntu里执行sudo apt install libgtk-3-0 libqt5widgets5如果是用了GNOME特性的应用可能还需要装些额外依赖。这类问题排查思路是先看报错信息里的“ImportError”或“cannot open display”字样前者多半是缺库后者多半是DISPLAY设置或X Server没起来。另一个常见坑是中文显示乱码。WSL里如果没装中文字体图形界面会显示一堆方框。解决办法是安装字体包sudo apt install fonts-noto-cjk。这个字体包包含了完整的中文字形安装后VSCode、gedit、浏览器等应用的中文显示基本就没问题了。5. WSL2内存占用过高的根治方案5.1 为什么WSL2会吃掉大量内存这是温度最高的热词之一“wsl2内存占用”、“电脑内存占用过高”、“ntoskrnl占用内存太高”。WSL2架构决定了它有一个内存管理模式Linux内核的页缓存Page Cache会尽可能多地占用“虚拟机内存”也就是说只要Linux端没有主动释放这些内存就不会立即还给Windows。这在单机场景下问题不大但在只有8GB或16GB内存的电脑上WSL2随随便便就把几GB、十几GB内存“吃”掉Windows这边就变得卡顿。罪魁祸首主要是三块一是Linux的文件缓存WSL2会把访问过的文件页留在内存里二是开发工具本身比如Node.js的进程、Docker的守护进程、Java的JVM都很占内存三是WSL2虚拟机的固定分配策略它在启动时会从Windows端一次性预留大量内存而不是按需动态增长。我还遇到过一种特殊场景在WSL里删除了大文件但Windows任务管理器看到内存占用并没有下降。这其实也是页面缓存导致Linux不会因为文件被删就立刻释放相关页面它会等到内存压力大的时候才回收。5.2 通过.wslconfig限制WSL内存上限WSL2的配置核心是放在用户目录下的.wslconfig文件。路径是C:\Users\你的Windows用户名\.wslconfig如果文件不存在就新建一个。我的个人建议配置如下[wsl2] memory4GB processors4 swap2GB swapFileD:\\wsl\\swap.vhdx localhostForwardingtrue autoMemoryReclaimgradual sparseVhdtrue逐项解释一下memory4GB限制WSL2最大内存为4GB这是最直接的“止血”手段。如果你只有16GB内存且平时会开浏览器、微信、IDE4是一个稳妥值如果你有32GB内存且经常跑编译6GB或8GB也合理。给的参数需要结合业务场景权衡不是一个固定答案。processors4限制WSL2使用的CPU核心数防止编译任务吃满全部核心导致Windows卡顿。swap2GB给WSL2配置额外交换空间。不是越大越好因为内存紧张时过量使用swap会导致磁盘IO频繁系统反而变慢。swapFile把交换文件放到D盘防止C盘空间被挤爆。autoMemoryReclaimgradual这是WSL 2.0.5以后新增的参数可以让WSL在空闲时自动回收缓存内存gradual表示逐步回收不会突然把内存大量交还而影响性能。sparseVhdtrue让虚拟磁盘稀疏化删除的文件空间可以自动回收避免WSL虚拟磁盘文件ext4.vhdx越涨越大。改完配置文件需要执行wsl --shutdown再重新进入发行版让配置生效。注意保存前先退出WSL终端否则会提示被占用。5.3 常见WSL内存占用异常排查有时你已经配置了memory限制但任务管理器里WSL相关的内存占用仍居高不下。这时候要做的是到WSL内部去查而不是只看Windows任务管理器。第一步打开WSL终端输入free -h这个命令会显示Linux端内存总量和使用量。如果使用量远小于Windows端看到的限制值说明内存被缓存占用了不用太担心如果使用量确实很大那就要继续往深挖。第二步ps aux --sort-%mem | head -20这会按内存使用排序列出占用最高的20个进程。在我实际排查中最常见的“吃内存大户”是这几个Elasticsearch或MySQLJava系进程内存占用非常大默认堆内存配置经常占满系统内存。前端项目的node_modules相关进程比如Vite、Webpack的dev server尤其是多个项目同时开的时候。Docker Desktop在WSL里跑的后台服务。一些build工具比如Android的Gradle守护进程。针对Java系进程核心办法是调低JVM堆内存比如给Elasticsearch设置ES_JAVA_OPTS-Xms512m -Xmx512m给MySQL调低innodb_buffer_pool_size。不要指望只靠WSL配置解决问题应用层的内存配额更要管好。第三步用wsl --shutdown完全关闭所有发行版观察一小时后Windows内存是否恢复正常。如果恢复到很低的占用说明之前的内存是被WSL正常占用的如果依然高就有可能是其他Windows进程比如Antimalware Service Executable、Edge浏览器在占用和WSL关系不大。另外很多用户纠结于“wsl --update完成后内存没释放”这里我说明下WSL内核更新后建议执行一次wsl --shutdown这样所有运行中的虚拟机和虚拟磁盘缓存都会完全关闭重启后内存能回到干净状态。5.4 彻底解决“已提交内存占用很大”问题任务管理器里的“已提交内存”如果很大说明系统提交的内存总量包括物理内存加页面文件很高。WSL2默认的swap机制会占用一部分提交量限制方式是我们在.wslconfig里已经配置了swap大小。还有个细节经常被忽略当你删除了WSL的发行版但“已提交内存”依然很大这时候要检查虚拟磁盘文件是否还挂载在Hyper-V虚拟机里。执行wsl --shutdown后用管理员PowerShell执行Get-VM查看是否还有残留的虚拟机不确定就重启电脑一次从根本上重置所有WSL相关状态。对于WSL中删除文件后磁盘空间没有立刻释放的问题除了配置sparseVhdtrue之外也可以用脚本手动压缩虚拟磁盘。在Windows的PowerShell里执行wsl --shutdown diskpart # 在diskpart里选择虚拟磁盘文件执行compact vdisk比如select vdisk fileC:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxx\LocalState\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk这是个经典的对vhdx瘦身流程能释放WSL虚拟磁盘文件占用的物理空间对C盘吃紧的用户非常管用。6. WSL常见问题与排查技巧实录6.1 安装报错与网络异常排查速查结合热搜词和我的实际踩坑经历先整理一张高频问题速查表。现象可能原因解决方向wsl --install卡在下载界面网络问题远端下载慢手动下载离线包或者启用代理注意代理本身也要合规提示wsl version is too oldWSL内核组件太旧执行wsl --update或手动安装MSI更新包wsl --update下载极慢网络连接问题尝试更换网络、使用移动热点、或手动下载安装包安装完Ubuntu启动报403企业环境策略或网络限制改用离线appx包安装确认Windows更新服务可用启动Ubuntu显示“计算机无法连接到远程计算机”Hyper-V虚拟化服务异常或者虚拟化未开启检查BIOS虚拟化开关重启管理员执行bcdedit /set hypervisorlaunchtype autoWSL1升级WSL2失败BIOS虚拟化未开启或虚拟机平台功能未启用BIOS打开VT-x/AMD-V启用VirtualMachinePlatform功能启动即崩溃无输出分发版文件损坏执行wsl --unregister 发行版名后重装表里的“403”问题我单独展开一下有些机器在自动安装时会报“无法解析服务器的名称或地址”或者收到HTTP 403错误。这通常是公司网络代理或安全策略拦截了WSL的下载域名。最省心的绕过方式就是前面提到的走自定义下载用手机热点或备用网络下载离线安装包再拷贝到目标机器安装。6.2 实用配置项与性能调优经验除了内存配置还有几个日常体验提升工具类配置发行版默认用户。如果你使用wsl命令进入时总是以root身份登录可以在PowerShell里设置默认用户ubuntu config --default-user 你的用户名。不同发行版命令略有区别Ubuntu对应ubuntu configDebian对应debian config。默认发行版切换。装了多个发行版后执行wsl --set-default Ubuntu来切换默认。环境变量继承。WSL2默认会从Windows继承很多环境变量Path这有时会让Linux里面执行which出现两条路径。想减少这种混乱可以在/etc/wsl.conf的[interop]节设置appendWindowsPath false但那样做也会失去在WSL里直接调用Windows命令的便利不到万不得已不建议关。系统dsystemd支持。新版WSL在/etc/wsl.conf里写入[boot] systemdtrue开启后就能正常用systemctl管理服务了这对于跑容器或需要systemd服务的开发非常有用。开启后同样要重启WSL。动态端口转发。如果你在WSL里运行了一个服务比如Python的Flask 8000端口Windows浏览器直接访问http://localhost:8000即可这是localhostForwardingtrue默认开启的功效。不用再自己去搞端口映射这对新人是个非常好的体验点。6.3 文件系统性能问题为什么代码要放Linux目录我在前面几次提到“项目不要放在/mnt/c/下”这里把原因说透。WSL2对Windows驱动器C盘、D盘的访问走的是9P协议文件路径会经过虚拟化层的翻译和协议封装对于大量、小文件的操作比如读一个node_modules里几千个小文件延迟会明显增加。而放在Linux原生的/home目录下是在EXT4文件系统内直接访问IO性能接近宿主机原生水平性能差距可能达到数倍甚至十倍以上。有个很典型的对比实验同样一个包含3万个文件的node_modules目录在/mnt/c/project下执行ls要等1到2秒在/home/user/project下执行几乎瞬间完成。如果你日常开发的主力项目在Windows盘符下建议迁移到Linux目录至少把构建缓存和依赖目录放过去。具体做法是在WSL终端里把项目复制过去cp -r /mnt/c/projects/myapp /home/你的用户名/code/然后可以顺手做软链接方便从Windows侧访问mkdir -p /mnt/c/projects ln -s /home/你的用户名/code/myapp /mnt/c/projects/myapp但是注意软链接是从Windows读还是从WSL读决定了你走的流量路径。实际操作中你在Windows侧编辑这个软链接指向的文件打开速度仍然会慢。最好的体验是编辑器VSCode在WSL模式下打开Linux目录而不是直接访问\\\\wsl的映射盘。两者的性能和稳定性我亲自对比过VSCode Remote-WSL模式打开大项目明显更流畅。7. 我的WSL环境清单与个人使用心得按照惯例分享一套我两年多来一直很稳定的WSL环境配置方便拿来当基线参考。宿主机Windows 11 23H2 / Windows 10 22H2发行版Ubuntu 22.04 LTSVSCode插件Remote Development、Python、ESLint、Prettier、GitLens终端Windows Terminal Cascadia Code内存配置.wslconfig配置为memory4GBprocessors4autoMemoryReclaimgradual日常开发Node.js 18 Python 3.11 DockerWSL2后端在这个组合下我日常开VSCode、浏览器、微信、WSL16GB内存的笔记本依然保持流畅。WSL里的Docker服务常驻时早期内存飙升的问题现在已经很少出现核心功劳就是内存上限配置和自动回收。这里有个经验想多聊两句很多人把WSL内存优化理解成“把memory设得越小越好”我建议不要走极端。WSL2作为开发环境内存设置太小会导致编译时频繁交换到磁盘系统反而卡得更厉害。合理做法是先观察一周记录自己常用项目的峰值内存再设置一个略微高于峰值的限制值。我的16GB机器给WSL分4GB属于偏保守配置如果你跑大型前端构建或者本地数据库比较频繁可以考虑内存6GB加swap4GB但要留意Windows侧剩余内存是否够用。最后再分享一个小习惯每当我觉得电脑变卡、内存占用异常我会先用wsl --shutdown把整个WSL彻底关掉再观察Windows侧表现这样就可以很快判断问题到底出没出在WSL层。如果关掉之后一切流畅那基本就是WSL内部某个服务或应用在“讨债”了再去WSL里用ps aux定位具体进程也不迟。这个排查思路虽然朴素但非常高效也适合任何WSL新用户快速定位问题。