intellij idea安装 Apache 服务注册中心 Redis docker安装部署 golang keras lambda shiny nhibernate drupal7 ionic framework Notify.js bootstrap管理系统模板 jquery each jquery获取最后一个子元素 java解析json数组 mysql卸载重装 linux下载器 input边框颜色 python字典类型 python条件判断 python中time python调用自定义函数 java的string java程序实例 java的random java对象序列化 java集合图 java8函数式编程 java配置jdk java数据类型转换 摩斯密码翻译 fireworks8序列号 wscript 摩斯密码翻译器 comsol下载 送货单管理系统 proteus8 关闭页面
当前位置: 首页 > 学习教程  > 编程语言

WSL入坑与踩坑

2020/10/8 20:19:29 文章标签:

WSL入坑与踩坑 这篇文章,将会娓娓道来我使用WSL的经历,包括如何安装以及早期玩家踩的一些坑。这是一个很好的工具,与vscode简直是绝配。 文章目录WSL入坑与踩坑WSL是什么快速入门使用踩坑总结WSL是什么 适用于 Linux 的 Windows 子系统可让开…

WSL入坑与踩坑

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

文章目录

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

WSL是什么

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

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

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

快速入门

  目前微软推出了两个版本的Linux子系统,分别是WSL1WSL2。我个人推荐使用最新版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模式,如果你停用VscodeRemote-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开心,太香了~


本文链接: http://www.dtmao.cc/news_show_250264.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?