限制wsl2占用过多内存
本文最后更新于:September 24, 2020 am
本文主要记录使用wsl2长时间开启后占用过多系统内存的解决办法。
1、前言
前几天笔记本一直没有关机,后面发现系统内存已经被占满了,我的笔记本扣掉核显内存占用之后可用容量大概还有15G多一点,用任务管理器里面查看发现是Vmmem
这个进程占用了大量的内存,这个就是wsl
对应的虚拟机进程。
查询了相关资料发现这并不是个例,wsl2本身的机制似乎会不断地拿宿主机的内存来给自己当cache使用,并且拿了还不还,之前使用台式机的时候有关机的习惯因此并不会太明显,现在使用笔记本长时间不关机就触发了这个问题。目前来说主要有以下几个解决方案:
- 重启wsl2
- 使用.wslconfig文件限制资源
- 调整内核参数定期释放cache内存
2、重启wsl2
如果我们直接关闭wsl2
的窗口并不会关闭该wsl2
的虚拟机,它依旧会在后台运行,需要关闭wsl2的话我们可以打开powershell
,在里面使用wsl --shutdown
命令就可以关闭全部的wsl2
虚拟机了。之后再随意打开一个wsl2的窗口就会再次开启虚拟机。
这种方式释放内存最彻底,效果和物理机内存不足卡死然后直接重启是一样的。
3、限制wsl2内存使用
这个解决方案来自github,简单来说就是创建一个%UserProfile%\.wslconfig
文件来限制wsl使用的内存总量。比如说我在Windows中使用的用户是tinychen,那么我就在C:\Users\tinychen
中创建了一个.wslconfig
文件,在里面加入以下内容来限制wsl2的内存总大小:
1 |
|
注意修改完成之后需要重启wsl2才能生效。更多详细的配置可以查看官方文档。
4、定期释放cache内存
Linux内核中有一个参数/proc/sys/vm/drop_caches
,是可以用来手动释放Linux中的cache缓存,如果发现wsl2的cache过大影响到宿主机正常运行了,可以手动执行以下命令来释放cache:
1 |
|
当然也可以设置成定时任务,每隔一段时间释放一次。