WSL入坑与踩坑

    科技2025-11-17  5

    WSL入坑与踩坑

    这篇文章,将会娓娓道来我使用WSL的经历,包括如何安装以及早期玩家踩的一些坑。这是一个很好的工具,与vscode简直是绝配。

    文章目录

    WSL入坑与踩坑`WSL`是什么快速入门使用踩坑总结

    WSL是什么

    适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。

      它是直接运行在win上的一个程序,对于普通Linux使用者来说,它已经能够满足大部分需求,比如你完全可以在它下面进行go开发,与真正的linux虚拟机使用效果一致。虽然它目前还不能够运行systemctl等程序,但不影响我们在win下快速使用linux命令行的需求,因为开启是秒开。而不是像虚拟机一样需要恢复快照等等。我们暂且将它看成是阉割版的Linux,因为未来它肯定是一个趋势,功能也将更加完善(据说未来还会支持图形界面)。

      下面摘抄自官网文档,简略列出目前可用的功能:

    快速入门

      目前微软推出了两个版本的Linux子系统,分别是WSL1和WSL2。我个人推荐使用最新版WSL2,之所以这样选择,是因为目前我在稳定使用的版本是2,且官方也对比了两者的区别:

      如果想要知道更多详细的区别,可以查看传送门

    下面就开始安装新版WSL,坐好扶稳:

    步骤 1:启用适用于 Linux 的 Windows 子系统并检查系统版本

    以管理员身份运行Powershell并执行:

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

    检查系统版本: 打开win的命令行窗口,执行ver,得到当前系统的版本,比如我的是:

    如果你的版本满足下面的要求,可以继续进行步骤2,否则暂时只能安装WSL1,重启即可跳转至步骤5执行:

    步骤 2:启用虚拟机功能并更新到WSL2

    这一步骤是为了能够进一步更新到WSL2,同样以管理员身份运行Powershell并执行:

    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

    重新启动计算机,以完成 WSL 安装并更新到 WSL 2。

    步骤3:下载Linux内核更新包

    在命令行或者Powershell下面运行(我默认你是中文系统,因为的话双引号里面填System Type):

    systeminfo | find "系统类型"

    如果你用的是 X64 计算机,请下载适用于 x64 计算机的 WSL2 Linux 内核更新包 如果使用的是 ARM64 计算机,请下载 ARM64 包。

    运行上面下载的内核更新包,并选择"是"批准安装。

    步骤4:将 WSL2 设置为默认版本

    以管理员身份运行Powershell并执行:

    wsl --set-default-version 2

    步骤5:安装Linux分发版

    打开Microsoft Store,显示如下列表,你可以选择你需要的版本:

    步骤6:设置新分发和完成安装

    首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,等待片刻后会提示你设置账户和密码。设置完成后,安装流程就结束了。

    你可以通过命令:

    wsl --list --verbose

    查看当前所有的Linux分发版以及为其分配的WSL版本。

    通过命令:

    wsl --set-version <distribution name> <versionNumber>

    将分发版设置为受某一 WSL 版本支持。

    你还可以通过命令:

    wsl -d <distribution name>

    来选择打开某个分发版。

    使用

      有两种方式使用WSL,你可以直接在命令行执行wsl,也可以通过Vscode远程连接。

    命令行执行wsl会进入默认的分发版:

    使用Vscode远程控制:

      使用Vscode的好处是能够可视化的看到文件目录,并且我们的Vscode插件仍旧能够起作用,终端直接就是wsl,直接开发并且在终端运行代码简直不用太方便,我们不用再像平时使用虚拟机一样先在虚拟机下载一个vscode并下载插件,直接拿我们现有的在Win上的Vscode就可以连接我们的WSL。你可以在Vscode中安装拓展:

    随后你就可以使用它远程控制你的WSL:

    踩坑

    下面会给出我踩的坑和解决办法,参考自许多Github issues和博客,许多方法不一定可行,下面是我实际成功的办法。

    使用WSL1遇到的问题:

    如果你还没有更新至WSL2,你大概率在使用Vscode时会遇到下面的问题:

    上面的node直接用了快2G的RAM,你可以打开其文件位置,可以看到这是WSL端的一个文件,它其实是WSL端的一个vscode-server,因为我们使用Vscode远程控制WSL,这其实是C/S模式,如果你停用Vscode的Remote-WSL插件,也就是上面安装的远程连接WSL的插件,你就会发现内存恢复正常了。

    解决办法有两个:

    直接使用Win10终端开启WSL并使用你也可以安装一个libc6的补丁,在WSL内执行:wget "https://launchpadlibrarian.net/474302949/libc6_2.31-0ubuntu8+lp1871129~1_amd64.deb" sudo dpkg -i libc6_2.31-0ubuntu8+lp1871129~1_amd64.deb 这个问题在High cpu usage of node process in Remote-WSL extension #2921中可以看到详细信息,里面牵涉到代码sleep的问题,感兴趣的话可以去看看大神们的讨论。如果你发现上一个解决办法还是无法解决,你可能遇到了打补丁失败的错误,你可以继续查阅其他博客如何打补丁,不过如果你系统满足WSL2要求,还是建议升级到WSL2,这个问题已经不再出现。

    使用WSL2遇到的问题:

    恭喜你更新到WSL2,但是随之而来马上又有一个大问题,那就是Vmmem内存占用过大问题:

    这是虚拟内存每次申请之后没有释放,而是一直占用,所以它会持续堆积。这是WSL2的BUG。

    解决办法有两个:

    参考WSL 2 consumes massive amounts of RAM and doesn’t return it #4166,在你的%UserProfile下创建文件.wslconfiig,并写入配置,你可以根据你的内存来分配比如你8G可以分配给它1G或2G也不会显得卡顿。

    有可能你遇到高CPU使用的情况,同样可以通过编写配置来解决,添加processors=1给与它之多一核,你可以根据需要修改。 注意,编写完.wslconfig文件后,一定要以ANSI格式存储,这样才会起作用。

    更多的配置选项,你可以查看WSL 命令和启动配置

    你也可以定期清理缓存,参考下图,如果你看不懂,可以参考博客wsl2 出现 Vmmem内存占用过大问题解决:

    总结

      上一小节的踩坑是我在使用过程中遇到的所有问题,查阅了很多issue和博客,最终将可以用的方法总结了一下,也简要给出了原因使得你不是云里雾里。参考的链接在前面都有给出,大多都是自己查issue找到的解决办法。作为软件的早期用户,我们会遇到许许多多的bug,这是不可避免的,所以我们要长期跟进他们的issue,这样才能看到你出现的异常情况是否是大家都出现的问题,以及相应的解决办法。祝你使用WSL开心,太香了~

    Processed: 0.013, SQL: 8