限制WSL2占用内存大小-Vmmem
上一级页面:index-wsl
前言
查看这篇文章:Memory Reclaim in the Windows Subsystem for Linux 2 - Windows Command Line (microsoft.com)
方法
设置C:\Users\la\.wslconfig
,注意格式为UTF-8(NO with BOM)
# guiApplications一个布尔值,用于在 WSL 中打开或关闭对 GUI 应用程序 (WSLg) 的支持。 仅适用于Windows 11。
# see https://docs.microsoft.com/en-us/windows/wsl/wsl-config
[wsl2]
guiApplications=true
processors=8
memory=2GB
swap=16GB
localhostForwarding=true
解释一下,memory=2GB
指定内存占用的最大值,这个值是所有实例公用的,开的实例多,就设置高一些
swap=16GB
很好理解,swpfile文件大小为16GB,占用的是磁盘,,默认位置为%USERPROFILE%\AppData\Local\Temp\swap.vhdx
此外还要解决Linux自己的内存机制问题,
故事的另一半:缓存内存
用户进程并不是唯一使用 Linux VM 中内存的事物。Linux 内核还使用许多缓存,包括页面缓存,该页面缓存缓存文件内容以提高文件系统性能。
因为我们访问了许多不同的文件,现在我们的页面缓存大小为1.7GB。在 Linux 内核释放页面缓存之前,我们不会释放它。这是一个设计决策,以确保您体验到页面缓存的性能改进。
如果您希望手动删除内容,则可以以 root 用户身份运行下列命令。
echo 1 > /proc/sys/vm/drop_caches
释放该内存后,它也将被返回到 Windows,并且 WSL2 VM 的大小将缩小。在此示例中,当我关闭运行 WSL 发行版的终端 Windows 时,Linux 内核会自然释放页面缓存。
还可以加入到自动任务,见linux服务器buff-cache过高-定时任务自动清理缓存
它是如何运作的
此功能由 Linux 内核修补程序提供支持,该修补程序允许在 Linux 客户机中不再需要小的连续内存块时将其返回到主机。
我们更新了 WSL2 中的 Linux 内核以包含此修补程序,并修改了 Hyper-V 以支持此页面报告功能。为了向主机返回尽可能多的内存,我们定期压缩内存,以确保可用内存在连续块中可用。这仅在 CPU 空闲时运行。
您可以通过在命令输出中查找WSL2: Performing memory compaction
消息来查看何时发生这种情况。
dmesg | grep -5 'WSL2: Performing memory compaction' | less
如果您是超级用户,则可以通过在 .wslconfig 中编辑值来配置此行为。请查看 WSL 19013 发行说明以查看这些选项。
- 注:这里说的实际上是设置为
pageReporting
为true
,这会自动运行内存回收,虽然它实际上效果不佳
或者,如果要手动运行此 Linux 命令,则可以以 root 用户身份运行该命令。
- 注:即手动在本次实例运行过程中启用内存回收
echo 1 > /proc/sys/vm/compact_memory
参考、引用、致谢
Memory Reclaim in the Windows Subsystem for Linux 2 - Windows Command Line (microsoft.com)