本文记录了 Windows 系统上 WSL2 高级设置选项参数的详细配置说明。
前言
WSL2 可以在 Windows 系统上提供无缝高效的 Linux 环境体验。
但是默认情况下,WSL2 中的 Linux 子系统资源分配(CPU 、内存、网络)可能不满足开发人员的需求。
微软提供了两种 WSL 设置的配置文件类型,其简单区别如表格所示:
配置文件 | 文件位置 | 适用范围 |
---|---|---|
.wslconfig |
Windows 用户目录下 | 作用于 WSL2 中的全部 Linux 发行版(仅 WSL2 可用) |
wsl.conf |
实际为 Linux 的 /etc/wsl.conf 文件 |
作用于 WSL 中的单独 Linux 发行版( WSL1 和 WSL2 均可用) |
根据实际使用场景,本文采用的是 .wslconfig
全局配置的方式。
Windows 版本 : Windows 11 家庭版,22H2
可用配置
WSL2 的全局配置需要使用 .wslconfig
文件。
目前 .wslconfig
文件内容可分为主要配置和实验性配置,这两者分别以 [wsl2]
和 [experimental]
作为区块名。
若想 .wslconfig
配置生效,需要把 .wslconfig
文件存放至 Windows 的用户目录下(该文件默认不存在)。
建立配置
- 在 Windows 终端执行以下命令打开用户目录
start %UserProfile%
- 在 Windows 的用户目录下创建名为
.wslconfig
的文件,然后编辑.wslconfig
文件的内容即可
注意:
使用.wslconfig
全局配置需要 Windows 版本大于等于 19041 以及使用 WSL2 运行 Linux 发行版
执行命令wsl --shutdown
关闭 WSL2 中的发行版后才能使.wslconfig
配置生效(完全关闭 WSL2 中的 Linux 大约需要 8 秒)
主要配置
- 以下为
.wslconfig
文件中可用的主要配置(该部分以[wsl2]
作为区块名)
注意:
带有*
号的配置仅能在 Windows 11 系统上使用
带有**
号的配置仅能在 Windows 11 22H2 及以上版本使用
实验性配置
- 以下为
.wslconfig
文件中可用的实验性配置(该部分以[experimental]
作为区块名)
注意:
带有*
号的配置仅能在 Windows 11 系统上使用
带有**
号的配置仅能在 Windows 11 22H2 及以上版本使用
配置示例
本部分展示了 .wslconfig
文件的官方示例和我在使用的个人示例,可以根据示例配置自行修改并应用。
官方示例
- 以下为微软官方提供的
.wslconfig
文件配置内容示例# Settings apply across all Linux distros running on WSL 2 [wsl2] # Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB memory=4GB # Sets the VM to use two virtual processors processors=2 # Specify a custom Linux kernel to use with your installed distros. The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel kernel=C:\\temp\\myCustomKernel # Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6 kernelCommandLine = vsyscall=emulate # Sets amount of swap storage space to 8GB, default is 25% of available RAM swap=8GB # Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx swapfile=C:\\temp\\wsl-swap.vhdx # Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free pageReporting=false # Turn on default connection to bind WSL 2 localhost to Windows localhost. Setting is ignored when networkingMode=mirrored localhostforwarding=true # Disables nested virtualization nestedVirtualization=false # Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging debugConsole=true # Enable experimental features [experimental] sparseVhd=true
个人示例
- 以下为我个人使用的
.wslconfig
文件配置内容示例# document : https://learn.microsoft.com/en-us/windows/wsl/wsl-config#example-wslconfig-file # Settings apply across all Linux distros running on WSL 2 [wsl2] # Limits VM memory to use no more than 2 GB, this can be set as whole numbers using GB or MB memory=2GB # Sets the VM to use two virtual processors processors=2 # Sets amount of swap storage space to 4GB, default is 25% of available RAM swap=4GB # Disables nested virtualization nestedVirtualization=false # If the value is mirrored then this turns on mirrored networking mode networkingMode=mirrored # Changes how DNS requests are proxied from WSL to Windows dnsTunneling=true # Enforces WSL to use Windows’ HTTP proxy information autoProxy=true # ----------------------------------------------------------------------------------------------------- # These settings are opt-in previews of experimental features that we aim to make default in the future # Enable experimental features [experimental] # Automatically releases cached memory after detecting idle CPU usage autoMemoryReclaim=dropcache # When this option is set to false, # DNS requests tunneled from Linux will bypass cached names within Windows to always put the requests on the wire useWindowsDnsCache=true # When set to true, # Windows will extract the question from the DNS request and attempt to resolve it, ignoring the unknown records bestEffortDnsParsing=true
总结
文中的示例仅用于 .wslconfig
配置文件, .wslconfig
配置文件作用于 WSL2 中的所有 Linux 发行版。
若在 .wslconfig
文件中设置 memory=2GB
,则 WSL2 中的所有 Linux 发行版将共用 2GB 内存。
.wslconfig
配置文件需要遵循 INI 语法。