WSL2 内存配置5 分钟改对 .wslconfig 的 memory、swap、processors【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSLWSL2 里一跑大编译就出现Killeddmesg里全是 Out of memory转头 Windows 自己也卡成 PPT——多半是内存配额没管好。WSL 的.wslconfig可以用memory、swap、processors三个键给 WSL2 虚拟机定资源上限本文带你把最小配置写出来、把配置落到[wsl2]段、改完用free -h验证、出错用快查表排查。先搞懂WSL2 的资源从哪来把你的 Windows 物理内存想成一池水WSL2 是其中一个从池里抽水的大水缸。默认它抽走池里一半的水主机内存的 50%Windows 剩下的得和浏览器、IDE 挤着过。memory就是给水缸装一道闸门缸里水位超过闸门就不再涨省下的留给 Windows 用。swap是接在主缸旁边的小副缸——主缸装不下时水会溢到副缸副缸落在磁盘上走得慢所以少量可以、多了会卡。processors则决定给这台水缸派几个工人干活。注意一个关键点同一个用户名下所有发行版共用这一台 WSL2 虚拟机、共用这一个水缸所以资源是按缸设的不是按发行版设的。WSL 的终端和 GUI 应用直接跑在 Windows 桌面上内存却来自这台虚拟水缸最小配置怎么写三步走通用记事本打开没有就新建%UserProfile%\.wslconfig。注意三件事INI 格式而不是 JSON、文件名带前导点、段落名必须是[wsl2]写成[wsl]整段都会被忽略。写入你要改的键保存[wsl2] memory8GB在 PowerShell 里执行wsl --shutdown彻底关掉虚拟机再输入wsl重新进系统。配置只在虚拟机启动时读取只关终端窗口不重启虚拟机是不生效的。验证在 WSL 里执行free -h预期Mem行的total接近你写memory的值内核自身占一部分略小于配置值算正常。没配置memory时默认值就是主机内存的一半nproc默认等于全部逻辑核数Swap默认约为内存的 25% 向上取整到 GB。选型对照表你的场景该动哪个键你的场景推荐配置一句话理由Windows 还要开 Docker Desktop、IDE、浏览器两边抢内存memory8GB给水缸设闸门把余量让回 WindowsWSL 里编译经常Killed或swap0后内存不够memory12GBswap8GB加高水位线副缸兜底防 OOM系统盘快满了swap 文件越滚越大swap0或swapFile换盘关副缸或把副缸挪到空间大的盘想让 WSL 吃满 CPU编译更慢是嫌核少processors16默认已给满只有刻意限核时才写它什么都不想动先观察默认行为不写任何配置50% 内存 自动 swap 是官方平衡值方案一用 memory 给内存封顶适用Windows 和 WSL 互卡、任务管理器里看到 WSL 相关进程如Vmmem吃掉十几 GB。[wsl2] memory8GB验证wsl --shutdown后重进 WSL执行free -hMem: total应约为 7.8Gi 左右。避坑① 单位必须大写GB/MB写8gb会被解析器判为非法并跳过该行只报警告free -h数值纹丝不动——单位解析实现在 src/shared/inc/stringshared.h② 写超过物理内存的值会被钳到物理内存上限别以为写了 64GB 就有 64GB。完整取值与钳位逻辑见 src/windows/common/WslCoreConfig.cpp。多个发行版终端同时开着但它们的内存都从同一个水缸里出方案二用 swap 控制磁盘换页适用编译大项目内存不够被 kill或不想让 WSL 在你唯一的系统盘上偷偷建几百 GB 的交换文件。[wsl2] memory8GB swap8GB验证free -h的Swap: total应约为 8Gi执行swapon --show能看到 WSL 挂载的 swap 设备。避坑① 默认 swap 会生成在%TEMP%\swap.vhdx每次虚拟机启动时创建、关闭时删除所以 TEMP 所在的盘要有足够余量也可以用swapFile%D:\wsl\swap指到别的盘生成逻辑在 src/windows/service/exe/WslCoreVm.cpp②swap0是彻底关副缸内存一碰顶就 OOM kill只适合我就是要把问题逼出来的调优场景。方案三用 processors 限制核数适用想让 WSL 别占满所有逻辑核给 Windows 侧任务留算力多数日常场景不需要写它因为默认就是全核。[wsl2] processors8验证wsl --shutdown后执行nproc输出应为8。避坑① 写超物理逻辑核数会收到too many processors警告并被钳回上限写之前先用nproc确认物理侧有多少核② 核给少了编译自然变慢这个键只用于限流别指望它反过来加速。排错速查表 现象原因解法改完free -h还是旧数值虚拟机没重启配置只在启动时读取PowerShell 执行wsl --shutdown再进 WSL进 WSL 时有 invalid value 警告、该行不生效单位小写、带空格或数值格式错单位大写GB/MB等号两边不留空格WSL 内进程被 OOM killdmesg有 Out of memorymemory偏小或swap0调大memory或恢复默认 swap系统盘空间被吃光出现大swap.vhdx默认 swap 随用量增长swap显式封顶或swapFile换盘Windows 卡顿任务管理器里 WSL 进程内存极高默认 50% 主机内存吃太多显式写较小的memory值写了processors64但nproc仍是 16物理逻辑核不足被钳位核数按物理实际值设置改完自查一遍配置没有最好的只有和你的内存总量、工作负载最匹配的那份。改完对着下面五项过一遍文件是%UserProfile%\.wslconfigINI 写法段落名为[wsl2]单位是大写GB/MB等号两边无多余空格保存后执行过wsl --shutdownfree -h的 Mem/Swap total 与配置值一致开了 swap 的确认了存放盘默认%TEMP%剩余空间充足另机器级还有%ProgramData%\Microsoft\WSL\.wslconfig用户级文件优先生效个人调参改用户级即可。【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考