系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

wslconfig

配置 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

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. .wslconfig 和 /etc/wsl.conf 的作用范围有什么不同?
  2. 修改 .wslconfig 后为什么只 wsl --terminate 一个发行版可能不生效?
  3. 默认内存和交换是多少?memory 设得太小有什么风险?
答案
  1. .wslconfig 在 Windows 用户目录,影响所有 WSL2 发行版的虚拟机;/etc/wsl.conf 在发行版内,只影响该发行版。
  2. WSL2 虚拟机可能还被其他发行版使用,虚拟机没有停止就不会重新读取配置;应 wsl --shutdown 并等待约 8 秒。
  3. 默认内存为物理内存的 50%,交换为内存的 25% 向上取整到 GB;设得太小会导致编译或服务被 OOM Killer 杀掉。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令