V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
danytdlemon1900
V2EX  ›  Windows

wsl2 的内存占用真是有够离谱的

  •  2
     
  •   danytdlemon1900 · 2021-02-05 14:54:48 +08:00 · 19081 次点击
    这是一个创建于 1386 天前的主题,其中的信息可能已经有所发展或是发生改变。
    真正的内存怪兽,加多少内存吃多少内存
    加了重启、清存储逻辑,还是卡,之前 16G 的时候吃掉 8 个 G,现在加到 32G 一口吃掉 15G,
    加了最大限制就开始卡,一副喂不饱的样子,我现在就像个过了 35 走下坡路的中年男人,每天一开电脑看见进程里面 Vmmem 喊饿我就头疼,加上 Chrome 这两兄弟赖在我电脑里混吃混合,开发体验逐日下降。
    有无好兄弟有好解法 QAQ
    83 条回复    2021-07-22 12:02:11 +08:00
    toptyloo
        1
    toptyloo  
       2021-02-05 14:57:59 +08:00
    我放弃了,直接还用 WSL 了,额外需求直接虚拟机。
    xiaoshouchen
        2
    xiaoshouchen  
       2021-02-05 14:58:34 +08:00
    我限制了 2 个 G,用 Docker,使用体验还行
    chenqh
        3
    chenqh  
       2021-02-05 14:59:38 +08:00
    直接 vagrant 吧,简单粗暴,经考验
    learningman
        4
    learningman  
       2021-02-05 15:00:11 +08:00
    有吗。。。我 4G 的 Surface Pro 4 开着 WSL2 都能抗一抗
    danytdlemon1900
        5
    danytdlemon1900  
    OP
       2021-02-05 15:00:35 +08:00
    @toptyloo 天下苦软软久矣,巨硬什么时候能让我们 wsl 用户硬一点
    danytdlemon1900
        6
    danytdlemon1900  
    OP
       2021-02-05 15:00:54 +08:00
    @learningman 可能我的项目比较重?
    danytdlemon1900
        7
    danytdlemon1900  
    OP
       2021-02-05 15:01:16 +08:00
    @chenqh 感谢指路,去瞄一眼
    chenqh
        8
    chenqh  
       2021-02-05 15:02:06 +08:00
    @danytdlemon1900 就是要网号
    liuxey
        9
    liuxey  
       2021-02-05 15:02:13 +08:00   ❤️ 1
    早日 mac
    danytdlemon1900
        10
    danytdlemon1900  
    OP
       2021-02-05 15:03:05 +08:00
    @liuxey 个人用 mac 喜滋滋,公司项目比较特殊,一般配置的 mac 还真跑不动 QAQ
    xiri
        11
    xiri  
       2021-02-05 15:08:17 +08:00
    @danytdlemon1900 你的项目重的话内存占用高这不是挺正常的吗。
    刚刚看了下我的,不在里面跑东西的话,同时打开 Debian10 和 Ubuntu20.04 ,Vmmem 这个进程也才占用 300M 内存
    chenqh
        12
    chenqh  
       2021-02-05 15:09:06 +08:00
    @xiri 怎么可能才那么点内存
    danytdlemon1900
        13
    danytdlemon1900  
    OP
       2021-02-05 15:10:38 +08:00
    @xiri 不能吧,你家 vmmem 怎么这么亲切,我项目重一点但是肯定用不到这么多,这情况肯定是占了内存没还我,你这个占用率也太友好了
    litujin1123
        14
    litujin1123  
       2021-02-05 15:13:59 +08:00
    好像会有不释放内存的情况,前两天,都没跑啥,直接吃了大半内存,加上 cpu100%。整个机器卡死了
    BeautifulSoap
        15
    BeautifulSoap  
       2021-02-05 15:14:52 +08:00 via Android
    lz 的问题应该不在 wsl2
    wsl2 在设了最大内存限制后,内存上的行为和普通虚拟机没区别
    目测楼主在 wsl2 里跑的东西有内存泄漏或在干其他什么非常吃内存的事情,这个你放到无论哪个虚拟机或者甚至宿主机里都一样,建议 lz 先排查下是什么东西那么吃内存

    ps:同时运行 wsl2 的多个发行版,他们的内存上限是公用的,同时运行多个发行版的人需要把上限设高点
    caixiaomao
        16
    caixiaomao  
       2021-02-05 15:15:27 +08:00
    为什么我限制之后直接蓝屏了 就跑个 docker 而已
    xiri
        17
    xiri  
       2021-02-05 15:16:24 +08:00
    https://s3.ax1x.com/2021/02/05/yGV076.jpg
    刚截的图,就只是同时打开了两个,没有在里面运行任何东西
    xiri
        18
    xiri  
       2021-02-05 15:16:45 +08:00
    neutrino
        19
    neutrino  
       2021-02-05 15:17:55 +08:00
    @danytdlemon1900 我用来 php 开发,nmp 那一套,再跑个 vscode server,大概 400M 。系统是 debian 9
    podel
        20
    podel  
       2021-02-05 15:17:59 +08:00   ❤️ 1
    @BeautifulSoap
    可以限制 WSL2 的内存使用。
    WSL2 吃内存的问题是,Linux 下面的 FileCache 会一直吃内存,虽然这部分内存能被 Linux 使用,但是 VM 认为内存不够了,系统又自动分配内存。于是就这样子 内存越吃越多。 一定程度上来说,可以调整 Linux 的 FileCache 策略也能解决。
    zwy100e72
        21
    zwy100e72  
       2021-02-05 15:20:05 +08:00
    试试 wsl 内 root 用户执行 `echo 1 > /proc/sys/vm/drop_caches` [1] ;试试限制最大使用量 [2] ;试试加内存到 64 GB 🐶

    [1]: https://devblogs.microsoft.com/commandline/memory-reclaim-in-the-windows-subsystem-for-linux-2/
    [2]: https://itnext.io/wsl2-tips-limit-cpu-memory-when-using-docker-c022535faf6f
    danytdlemon1900
        22
    danytdlemon1900  
    OP
       2021-02-05 15:20:38 +08:00
    @xiri so charming 羡慕
    danytdlemon1900
        23
    danytdlemon1900  
    OP
       2021-02-05 15:21:11 +08:00
    @BeautifulSoap 是个方向,容我检查一下项目
    danytdlemon1900
        24
    danytdlemon1900  
    OP
       2021-02-05 15:21:26 +08:00
    @zwy100e72 64G ?
    sky96111
        25
    sky96111  
       2021-02-05 15:24:13 +08:00 via Android
    启动我只占用 130mb,除去编译时一般也就占用 800mb,但 wsl2 和 hyper-v 一样,动态内存大小不会主动释放,需要 wsl --shutdown 才能释放。不过占用了那么多内存挺离谱的…我觉得还是项目有内存溢出
    sky96111
        26
    sky96111  
       2021-02-05 15:25:18 +08:00 via Android
    内存泄漏…
    XIVN1987
        27
    XIVN1987  
       2021-02-05 15:25:36 +08:00   ❤️ 2
    坚持 WSL1 100 年不动摇
    若对 WSL2 某些功能有需求,,不如装个虚拟机,,
    danytdlemon1900
        28
    danytdlemon1900  
    OP
       2021-02-05 15:27:02 +08:00
    @sky96111 定期 wsl --shutdown 已经成为我的日常,项目内部应该也是有些问题
    neutrino
        29
    neutrino  
       2021-02-05 15:28:41 +08:00
    @danytdlemon1900 我用 wsl --shutdown 来解决 localhost 不能访问的问题
    dawnh
        30
    dawnh  
       2021-02-05 15:29:42 +08:00
    有几个原因会导致 Linux 占着内存不释放,WSL2 加了 Reclaim 内存功能,看一下这篇: https://devblogs.microsoft.com/commandline/memory-reclaim-in-the-windows-subsystem-for-linux-2/
    love
        31
    love  
       2021-02-05 15:39:53 +08:00   ❤️ 1
    为啥不直接上真 linux 做开发呢?
    mrxun1998
        32
    mrxun1998  
       2021-02-05 15:58:20 +08:00
    正常使用,500 多 m
    faust24601
        33
    faust24601  
       2021-02-05 16:02:06 +08:00 via iPhone
    hyper-v 它不香吗
    systemcall
        34
    systemcall  
       2021-02-05 16:08:51 +08:00
    wsl2 理论上会自动把占用的内存释放一些给 Windows,但是 Windows 真的抢不过 WSL2
    感觉虽然 wsl2 是跑在 Windows 里面的,实际上已经反客为主了,是这台电脑的真正主人
    danytdlemon1900
        35
    danytdlemon1900  
    OP
       2021-02-05 16:18:09 +08:00
    @XIVN1987 坚定地原教旨主义彳亍,不过这个体验改天找个闲的时候我也试试退版本回去重配个环境吧
    danytdlemon1900
        36
    danytdlemon1900  
    OP
       2021-02-05 16:18:48 +08:00
    @dawnh 学习一哈
    Nich0la5
        37
    Nich0la5  
       2021-02-05 16:30:29 +08:00
    我现在轻的在 wsl 跑跑,重的我还有台物理机远程过去了
    royzheng
        38
    royzheng  
       2021-02-05 16:37:38 +08:00
    %UserProfile% 目录下加.wslconfig 文件限制使用内存,这都不知道???
    lz0755
        39
    lz0755  
       2021-02-05 16:42:53 +08:00 via Android
    wsl2 的月经贴,把内存当 cache 用还不主动释放
    限制内存或者 nocache
    cheng6563
        40
    cheng6563  
       2021-02-05 16:47:02 +08:00   ❤️ 1
    我也滚回 wsl1 + 虚拟机了
    danytdlemon1900
        41
    danytdlemon1900  
    OP
       2021-02-05 16:54:44 +08:00
    @royzheng 加了也是一样的,这要能那么见效快也不至于月经贴吐槽了
    BeautifulSoap
        42
    BeautifulSoap  
       2021-02-05 16:58:07 +08:00
    @podel 所以直接限制 wsl2 的内存上限不就行了,wsl2 之所以内存一直膨胀是因为基于 hyper-v,而 hyper-v 有个功能是“动态内存”,即虚拟机要多少内存给多少内存,没有上限。一般开 hyper-v 下的 linux 虚拟机是要直接关了这个功能的,要不然 linux 吞了内存 hyper-v 也不会释放

    wsl2 可以编辑下.wslconfig 文件关了这功能给整个 wsl2 添加一个内存占用上限
    neoblackcap
        43
    neoblackcap  
       2021-02-05 17:40:53 +08:00
    @systemcall wsl2 跟 windows 是同一个级别的,因为 wsl 是用 hyper-v 的技术。最底下才是 hypersivor,他们两个都是在 hypersivor 上面的。
    lerry
        44
    lerry  
       2021-02-05 17:45:54 +08:00
    我从 wsl2 换到 hyper-v 虚拟机了,主要是网络问题,还有 systemd,hyper-v 发现了个坑,虚拟机开了动态内存,就跑了几个 node 程序,有时候突然系统就卡了,风扇声音变大,发现 64g 内存都给我吃完了,关了动态内存,目前还好
    snowlyg
        45
    snowlyg  
       2021-02-05 17:47:58 +08:00
    rioshikelong121
        46
    rioshikelong121  
       2021-02-05 17:53:55 +08:00
    确实离谱, 我的最高占用 9 G 。。 随便跑跑 前端应用也有 4,5G 。
    herozzm
        47
    herozzm  
       2021-02-05 17:54:26 +08:00 via Android
    wsl 也要安装一个子 linux,为什么不用 hy 呢
    felixcode
        48
    felixcode  
       2021-02-05 17:56:26 +08:00 via Android
    用的 Linux 桌面,从来不用操心这些东西
    azkaban
        49
    azkaban  
       2021-02-05 20:14:50 +08:00
    哥你跑啥了,我也 wsl2,32 内存,一直就占 3g 以下
    Bunnyranch
        50
    Bunnyranch  
       2021-02-05 21:34:37 +08:00
    好巧 我也是整上 WSL2 用了一会滚回 1 了
    tolerance
        51
    tolerance  
       2021-02-05 21:44:40 +08:00
    配置.wslconfig 限制 wsl2 内存
    Weixiao0725
        52
    Weixiao0725  
       2021-02-06 00:52:08 +08:00
    还有在 wsl2 上运行 npm start 巨慢,win10 下瞬间就起来了。
    interim
        53
    interim  
       2021-02-06 02:31:42 +08:00
    @Weixiao0725 windows 和 WSL2 通过网络访问的,把工程放在 WSL2 下就一样速度了,npm 的包太吃 IO 了。
    jeeyong
        54
    jeeyong  
       2021-02-06 02:36:08 +08:00
    加到 64
    aliao0019
        55
    aliao0019  
       2021-02-06 02:59:54 +08:00 via iPhone
    解法就是用 .wslconfig 限制一下上限。
    aliao0019
        56
    aliao0019  
       2021-02-06 03:00:59 +08:00 via iPhone
    去 github 可以看 issue microsoft/WSL/issues/4166
    ebushicao
        57
    ebushicao  
       2021-02-06 09:11:51 +08:00
    我也是这样的,然后我换了 hyper-v 虚拟机。
    p1gd0g
        58
    p1gd0g  
       2021-02-06 09:24:15 +08:00
    [wsl2]
    memory=8GB # Limits VM memory in WSL 2 to 8 GB

    之前开 top 看了下,我这边主要是 gopls 占了不少内存。
    SJ2050cn
        59
    SJ2050cn  
       2021-02-06 09:41:26 +08:00
    我 32g 内存,wsl2 内存限制到 25g,平时占用也就 2g 的样子,没楼主那么夸张
    digitalwater
        60
    digitalwater  
       2021-02-06 09:46:04 +08:00   ❤️ 1
    ```
    sudo su
    echo 3 > /proc/sys/vm/drop_caches
    echo 2 > /proc/sys/vm/drop_caches
    echo 1 > /proc/sys/vm/drop_caches
    sync
    ```

    https://github.com/microsoft/WSL/issues/6451
    fuchaofather
        61
    fuchaofather  
       2021-02-06 10:51:47 +08:00
    这个确实, 我还专门升级了下内存到 24G, 后来放弃了用 vmware, 内存一下富裕了很多
    taosx
        62
    taosx  
       2021-02-06 10:53:03 +08:00   ❤️ 2
    一天不解决端口预留的问题 一天不用 hyper-v
    dobelee
        63
    dobelee  
       2021-02-06 11:54:40 +08:00
    限制一下内存。我是特别高的时候 shutdown 一下。
    cubecube
        64
    cubecube  
       2021-02-06 12:52:43 +08:00
    @systemcall 现在能还了么?之前测试,是无法归还内存给 host 的。只能设置最大值,这也是我弃用 wsl2 的最大原因,没有任何收益,管理还不如 vmplayer
    joyhub2140
        65
    joyhub2140  
       2021-02-06 12:57:58 +08:00 via Android
    我两台电脑都是 128GB,连 NUC 都上了 64GB,感觉还够用。。。
    systemcall
        66
    systemcall  
       2021-02-06 13:01:45 +08:00 via Android
    @cubecube 有时候会归还一些,运作的机制不是很清楚
    wsl2 里面 dmesg,可以看到 wsl2 内存归还的一些记录,似乎每隔一段时间都会尝试归还一些内存,但是还的不多
    NXzCH8fP20468ML5
        67
    NXzCH8fP20468ML5  
       2021-02-06 13:36:37 +08:00 via Android
    wsl2 只有会在 host 需要内存时才积极释放,其他时候能占多大占多大。
    我 vmmem 启动时大概 300M,经过一些操作后 3G,这时候 host 重负载的情况下(数据处理),就变成减少到 600M,这时候 host 的内存分配速度严重变慢。
    jancgk
        68
    jancgk  
       2021-02-06 14:20:14 +08:00
    WSL2 如果用 vbox 做虚拟化多好
    TJT
        69
    TJT  
       2021-02-06 15:19:30 +08:00


    日常 9G, 还行
    imbushuo
        70
    imbushuo  
       2021-02-06 16:53:03 +08:00   ❤️ 1
    我 160GB 内存,日常 WSL2 稳定吃 10GB 样子
    orannge
        71
    orannge  
       2021-02-06 17:26:00 +08:00
    官方内核是可以释放内存的,GitHub 上有些内核可能不行。但文件缓存占用的内存需要手动释放
    `echo 3 > /proc/sys/vm/drop_caches`
    volvo007
        72
    volvo007  
       2021-02-06 20:34:50 +08:00
    128G 无所畏惧,AMD YES
    RickyC
        73
    RickyC  
       2021-02-06 21:20:40 +08:00
    但是这是目前我找到, 在 windows 下开发最合适的环境了, 再不然就得直接换 linux 了
    ZZSZZSZZS
        74
    ZZSZZSZZS  
       2021-02-07 00:11:34 +08:00 via iPhone
    wsl 确实内存释放有点问题,我 16G 的机器,有一次在 wsl 里边编译了一遍 openwrt,就给我占用了 12G,而事实上开 htop 发现 wsl 的内存可用空间还有很多。Windows 真抢不过 wsl 。
    Dragonphy
        75
    Dragonphy  
       2021-02-07 08:43:27 +08:00
    我也遇到了,开了 WSL2 电脑巨卡,一看性能,内存达到 90%以上,vemm 占了一半
    melkor
        76
    melkor  
       2021-02-07 08:58:17 +08:00 via iPhone
    @imbushuo 160G 可还行
    Mithril
        77
    Mithril  
       2021-02-07 09:02:18 +08:00
    @Dragonphy WSL2 默认最多占 50%。
    awesomes
        78
    awesomes  
       2021-02-07 11:28:20 +08:00
    单就文件共享这一块就可以直接放弃 WSL2 了,用 WSL 它不香吗?用 docker 也没啥问题啊
    sleepm
        79
    sleepm  
       2021-02-07 13:21:41 +08:00
    @awesomes 我 wsl1 升的 wsl2,啥设置也没改过,和 wsl1 一样,照常 cd /mnt/c/users/admin,我也不知道这是不是 bug,反正就很神奇
    wsl2 内存占用也不高,除了烦人的 hyper-v 端口占用之外,没啥觉得不舒服的地方
    wls2 ubuntu 20.04 lts
    awesomes
        80
    awesomes  
       2021-02-07 13:32:03 +08:00
    @sleepm 当时我也是升到 2 了,但是发现开发访问文件非常慢,然后查了一下相关资料,确实是 wsl2 的问题,果断又回到 1 了。不知道你这是啥情况
    imbushuo
        81
    imbushuo  
       2021-02-08 05:48:36 +08:00
    @melkor Dell 的工作站(
    Dragonphy
        82
    Dragonphy  
       2021-05-13 16:47:35 +08:00
    我就跑个 node,占了快 5G,换回 WSL1 只占 1G 出头
    Nerv
        83
    Nerv  
       2021-07-22 12:02:11 +08:00
    两年了,这个问题还没修复。
    https://github.com/microsoft/WSL/issues/4166
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5316 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:42 · PVG 15:42 · LAX 23:42 · JFK 02:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.