版权声明:本文为 CSDN 用户「文艺圈不知名刘先生」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/huiruwei1020/article/details/107631502


自从装了 wsl 我这个年迈的电脑就更加吃力,尤其是内存基本上都要占到 90% 以上,打开任务管理器一看内存一半以上都是被 vmmem 吃掉了,于是在网上寻找解决办法,并记录优化过程。

# 定期执行缓存删除

  • 在 WSL bash 上,执行以下命令,并进入编辑模式

    $ sudo crontab -e -u root

    第一次运行会让你选择编译器,我选择了 nano,感觉更加友好。

    并添加以下行:

    */15 * * * * sync; echo 3 > /proc/sys/vm/drop_caches; touch /root/drop_caches_last_run

    */15 表示将每 15 分钟执行一次。您可以根据需要更改它

    转载时注: crontab 命令参考菜鸟教程

  • 自动启动 cron 服务

    在~/.bashrc 上添加以下行,允许启动 cron 服务而无需输入 root 密码,

    $ sudo nano ~/.bashrc
    [ -z "$(ps -ef | grep cron | grep -v grep)" ] && sudo /etc/init.d/cron start &> /dev/null
  • 在 WSL bash 上执行并添加以下行:

    $ sudo visudo
    sudo ALL=NOPASSWD: /etc/init.d/cron start

# 硬限制最大内存

  • 打开文件夹,在地址栏输入 %UserProfile% ,并回车。

  • 新建文件 .wslconfig ,并编辑内容:

    [wsl2]
    memory=4GB
    swap=8GB
    localhostForwarding=true

# 使配置生效

要确保所有更改都生效,请在 powershell 上执行 wsl --shutdown 。然后重新打开您的 WSL 终端.

$ wsl --shutdown

在 wsl 终端上可以通过查看 /root/drop_caches_last_run 上次修改日期来检查 cron 作业是否正在相应地运行:

$ sudo stat -c '%y' /root/drop_caches_last_run

上面设置的十五分钟一次,你可以计时看看有没有记录。

# ISSUE

这个问题,在 github 以上已经大量反馈,点击这里查看 issue 详情


Enjoy it !