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
内执行:
这个问题在High cpu usage of node process in Remote-WSL extension #2921中可以看到详细信息,里面牵涉到代码wget "https://launchpadlibrarian.net/474302949/libc6_2.31-0ubuntu8+lp1871129~1_amd64.deb" sudo dpkg -i libc6_2.31-0ubuntu8+lp1871129~1_amd64.deb
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内存占用过大问题解决:
- 参考WSL 2 consumes massive amounts of RAM and doesn’t return it #4166,在你的
总结
上一小节的踩坑是我在使用过程中遇到的所有问题,查阅了很多issue
和博客,最终将可以用的方法总结了一下,也简要给出了原因使得你不是云里雾里。参考的链接在前面都有给出,大多都是自己查issue
找到的解决办法。作为软件的早期用户,我们会遇到许许多多的bug
,这是不可避免的,所以我们要长期跟进他们的issue
,这样才能看到你出现的异常情况是否是大家都出现的问题,以及相应的解决办法。祝你使用WSL
开心,太香了~
共有条评论 网友评论