wsl2 的内存占用真是有够离谱的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
danytdlemon1900
V2EX    Windows

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

  •  2
     
  •   danytdlemon1900 2021-02-05 14:54:48 +08:00 20519 次点击
    这是一个创建于 1714 天前的主题,其中的信息可能已经有所发展或是发生改变。
    真正的内存怪兽,加多少内存吃多少内存
    加了重启、清存储逻辑,还是卡,之前 16G 的时候吃掉 8 个 G,现在加到 32G 一口吃掉 15G,
    加了最大限制就开始卡,一副喂不饱的样子,我现在就像个过了 35 走下坡路的中年男人,每天一开电脑看见进程里面 Vmmem 喊饿我就头疼,加上 Chrome 这两兄弟赖在我电脑里混吃混合,开发体验逐日下降。
    有无好兄弟有好解法 QAQ
    84 条回复    2025-05-29 10:37:51 +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/commandlne/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
    nxforce
        65
    nxforce  
       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
    brusetong
        84
    brusetong  
       140 天前
    fileCache 确实会吃掉一大部分内存 free -h
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2877 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 14:11 PVG 22:11 LAX 07:11 JFK 10:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86