配置 WSL2 的内存、CPU、交换和网络,重启后生效。
这里讲的是全局配置文件 %UserProfile%\.wslconfig,例如 C:\Users\me\.wslconfig,不是发行版内的 /etc/wsl.conf。.wslconfig 影响所有 WSL2 发行版,配置的是承载它们的轻量虚拟机;wsl.conf 只影响单个发行版,管自动挂载、互操作和启动命令。WSL1 不使用 .wslconfig 里的虚拟机参数。
常用的 [wsl2] 键包括 memory、processors、swap、swapFile、localhostForwarding、kernel、kernelCommandLine、networkingMode、dnsTunneling、autoProxy、firewall、nestedVirtualization、guiApplications。默认值不是固定的 8GB:当前文档写的是内存为物理内存的 50%,处理器为全部逻辑处理器,交换为内存的 25% 并向上取整到 GB,交换文件默认在 %Temp%\swap.vhdx。这些默认值和可用键会随 WSL 版本变化。
配置只在 WSL2 虚拟机启动时读取,改完必须让虚拟机完全停止并重启;通常执行 wsl --shutdown,等约 8 秒再启动。只 wsl --terminate 一个发行版,如果还有别的发行版在运行,虚拟机可能没有真正重启,配置不会生效。.wslconfig 只适用于 Windows Build 19041 及以后、且以 WSL2 运行的发行版;新版本还提供 WSL Settings 图形界面,可替代手工编辑。
# 1. 查看配置文件;文件不存在时会报“系统找不到指定的文件”
C:\> type "%UserProfile%\.wslconfig"
# 2. 用记事本创建或修改;路径必须是用户主目录下的 .wslconfig
C:\> notepad "%UserProfile%\.wslconfig"
# 3. 一个最小配置示例:限制内存、CPU、交换文件和交换盘位置
C:\> type "%UserProfile%\.wslconfig"
[wsl2]
memory=8GB
processors=4
swap=2GB
swapFile=C:\\temp\\wsl-swap.vhdx
localhostForwarding=true
# 4. 关闭 WSL2 虚拟机,等待约 8 秒让配置完全卸载
C:\> wsl --shutdown
C:\> timeout /t 8 /nobreak
# 5. 重新启动并验证内存和交换是否按配置生效
C:\> wsl -d Ubuntu -- free -h
# 6. 验证可见 CPU 数量是否等于 processors
C:\> wsl -d Ubuntu -- nproc
# 7. 查看默认版本和内核状态;旧版 WSL 没有 --version 时用这个
C:\> wsl --status
# 8. 更新 WSL 以获得新的配置键和网络模式,更新后仍需重启 WSL
C:\> wsl --update
.wslconfig 没效果,先确认文件名和位置:必须是 %UserProfile%\.wslconfig,不是 wslconfig.ini,也不是发行版里的 /etc/wsl.conf。改完执行 wsl --shutdown 并等待约 8 秒,再用 free -h 验证。.wslconfig 只对 WSL2 生效;WSL1 发行版看不到 memory、processors 等限制。用 wsl -l -v 确认版本,需要限制就先把发行版转成 WSL2。memory 写得太小会让编译、容器或数据库被 OOM Killer 杀掉;先备份原文件,按 free -h 的实际需求调整。影响范围是所有 WSL2 发行版,回滚是还原备份并再次 wsl --shutdown。GB/MB,处理器写整数,Windows 路径的反斜杠要双写,例如 C:\\temp\\wsl-swap.vhdx。排错时先注释掉新加的行,逐段恢复。memory 上限,较新版本再评估 [experimental] 的 autoMemoryReclaim。networkingMode=mirrored、dnsTunneling、autoProxy、firewall 等键依赖较新的 Windows 11 和 WSL 版本;不生效时先 wsl --status/wsl --version 看版本,再回退 networkingMode=nat,不要在生产脚本里假设一定支持。swapFile 要写绝对 Windows 路径,目录必须存在且有权限;swap=0 表示禁用交换,内存不足时更容易 OOM。修改后同样要 wsl --shutdown。processors 超过逻辑 CPU 数不会更快,设得太低会拖慢编译;用 nproc 验证。kernelCommandLine 写错可能导致启动失败,改前保留原文件并准备删除该行回滚。合上页面,先回答,再展开对照。
.wslconfig 和 /etc/wsl.conf 的作用范围有什么不同?.wslconfig 后为什么只 wsl --terminate 一个发行版可能不生效?memory 设得太小有什么风险?.wslconfig 在 Windows 用户目录,影响所有 WSL2 发行版的虚拟机;/etc/wsl.conf 在发行版内,只影响该发行版。wsl --shutdown 并等待约 8 秒。
小程序版
微信扫码,随时查命令