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

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

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

    ps:同时运行 wsl2 的多个发行版,他们的内存上限是公用的,同时运行多个发行版的人需要把上限设高点
    caixiaomao
        16
    caixiaomao  
       353 天前
    为什么我限制之后直接蓝屏了 就跑个 docker 而已
    xiri
        17
    xiri  
       353 天前
    https://s3.ax1x.com/2021/02/05/yGV076.jpg
    刚截的图,就只是同时打开了两个,没有在里面运行任何东西
    xiri
        18
    xiri  
       353 天前
    neutrino
        19
    neutrino  
       353 天前
    @danytdlemon1900 我用来 php 开发,nmp 那一套,再跑个 vscode server,大概 400M 。系统是 debian 9
    podel
        20
    podel  
       353 天前   ❤️ 1
    @BeautifulSoap
    可以限制 WSL2 的内存使用。
    WSL2 吃内存的问题是,Linux 下面的 FileCache 会一直吃内存,虽然这部分内存能被 Linux 使用,但是 VM 认为内存不够了,系统又自动分配内存。于是就这样子 内存越吃越多。 一定程度上来说,可以调整 Linux 的 FileCache 策略也能解决。
    zwy100e72
        21
    zwy100e72  
       353 天前
    试试 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
       353 天前
    @xiri so charming 羡慕
    danytdlemon1900
        23
    danytdlemon1900  
    OP
       353 天前
    @BeautifulSoap 是个方向,容我检查一下项目
    danytdlemon1900
        24
    danytdlemon1900  
    OP
       353 天前
    @zwy100e72 64G ?
    sky96111
        25
    sky96111  
       353 天前 via Android
    启动我只占用 130mb,除去编译时一般也就占用 800mb,但 wsl2 和 hyper-v 一样,动态内存大小不会主动释放,需要 wsl --shutdown 才能释放。不过占用了那么多内存挺离谱的…我觉得还是项目有内存溢出
    sky96111
        26
    sky96111  
       353 天前 via Android
    内存泄漏…
    XIVN1987
        27
    XIVN1987  
       353 天前   ❤️ 2
    坚持 WSL1 100 年不动摇
    若对 WSL2 某些功能有需求,,不如装个虚拟机,,
    danytdlemon1900
        28
    danytdlemon1900  
    OP
       353 天前
    @sky96111 定期 wsl --shutdown 已经成为我的日常,项目内部应该也是有些问题
    neutrino
        29
    neutrino  
       353 天前
    @danytdlemon1900 我用 wsl --shutdown 来解决 localhost 不能访问的问题
    dawnh
        30
    dawnh  
       353 天前
    有几个原因会导致 Linux 占着内存不释放,WSL2 加了 Reclaim 内存功能,看一下这篇: https://devblogs.microsoft.com/commandline/memory-reclaim-in-the-windows-subsystem-for-linux-2/
    love
        31
    love  
       353 天前   ❤️ 1
    为啥不直接上真 linux 做开发呢?
    mrxun1998
        32
    mrxun1998  
       353 天前
    正常使用,500 多 m
    faust24601
        33
    faust24601  
       353 天前 via iPhone
    hyper-v 它不香吗
    systemcall
        34
    systemcall  
       353 天前
    wsl2 理论上会自动把占用的内存释放一些给 Windows,但是 Windows 真的抢不过 WSL2
    感觉虽然 wsl2 是跑在 Windows 里面的,实际上已经反客为主了,是这台电脑的真正主人
    danytdlemon1900
        35
    danytdlemon1900  
    OP
       353 天前
    @XIVN1987 坚定地原教旨主义彳亍,不过这个体验改天找个闲的时候我也试试退版本回去重配个环境吧
    danytdlemon1900
        36
    danytdlemon1900  
    OP
       353 天前
    @dawnh 学习一哈
    Nich0la5
        37
    Nich0la5  
       353 天前
    我现在轻的在 wsl 跑跑,重的我还有台物理机远程过去了
    royzheng
        38
    royzheng  
       353 天前
    %UserProfile% 目录下加.wslconfig 文件限制使用内存,这都不知道???
    lz0755
        39
    lz0755  
       353 天前 via Android
    wsl2 的月经贴,把内存当 cache 用还不主动释放
    限制内存或者 nocache
    cheng6563
        40
    cheng6563  
       353 天前   ❤️ 1
    我也滚回 wsl1 + 虚拟机了
    danytdlemon1900
        41
    danytdlemon1900  
    OP
       353 天前
    @royzheng 加了也是一样的,这要能那么见效快也不至于月经贴吐槽了
    BeautifulSoap
        42
    BeautifulSoap  
       353 天前
    @podel 所以直接限制 wsl2 的内存上限不就行了,wsl2 之所以内存一直膨胀是因为基于 hyper-v,而 hyper-v 有个功能是“动态内存”,即虚拟机要多少内存给多少内存,没有上限。一般开 hyper-v 下的 linux 虚拟机是要直接关了这个功能的,要不然 linux 吞了内存 hyper-v 也不会释放

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

    之前开 top 看了下,我这边主要是 gopls 占了不少内存。
    SJ2050cn
        59
    SJ2050cn  
       352 天前
    我 32g 内存,wsl2 内存限制到 25g,平时占用也就 2g 的样子,没楼主那么夸张
    digitalwater
        60
    digitalwater  
       352 天前   ❤️ 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  
       352 天前
    这个确实, 我还专门升级了下内存到 24G, 后来放弃了用 vmware, 内存一下富裕了很多
    taosx
        62
    taosx  
       352 天前   ❤️ 2
    一天不解决端口预留的问题 一天不用 hyper-v
    dobelee
        63
    dobelee  
       352 天前
    限制一下内存。我是特别高的时候 shutdown 一下。
    cubecube
        64
    cubecube  
       352 天前
    @systemcall 现在能还了么?之前测试,是无法归还内存给 host 的。只能设置最大值,这也是我弃用 wsl2 的最大原因,没有任何收益,管理还不如 vmplayer
    joyhub2140
        65
    joyhub2140  
       352 天前 via Android
    我两台电脑都是 128GB,连 NUC 都上了 64GB,感觉还够用。。。
    systemcall
        66
    systemcall  
       352 天前 via Android
    @cubecube 有时候会归还一些,运作的机制不是很清楚
    wsl2 里面 dmesg,可以看到 wsl2 内存归还的一些记录,似乎每隔一段时间都会尝试归还一些内存,但是还的不多
    xxfye
        67
    xxfye  
       352 天前 via Android
    wsl2 只有会在 host 需要内存时才积极释放,其他时候能占多大占多大。
    我 vmmem 启动时大概 300M,经过一些操作后 3G,这时候 host 重负载的情况下(数据处理),就变成减少到 600M,这时候 host 的内存分配速度严重变慢。
    jancgk
        68
    jancgk  
       352 天前
    WSL2 如果用 vbox 做虚拟化多好
    TJT
        69
    TJT  
       352 天前


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