WSL 系统配置

WSL 系统配置文件、资源限制和网络配置


📋 目录


全局配置(.wslconfig)

.wslconfig 文件用于配置所有 WSL 发行版的全局设置,位于 Windows 用户目录下。

文件位置

C:\Users\YourUsername\.wslconfig

配置示例

[wsl2]
# 内存限制(单位:MB)
memory=4GB
 
# CPU 核心数限制
processors=4
 
# 交换空间大小(单位:MB)
swap=2GB
 
# 交换文件路径
swapFile=C:\\Users\\YourUsername\\AppData\\Local\\Temp\\swap.vhdx
 
# 本地主机转发
localhostForwarding=true
 
# 内核命令行参数
kernelCommandLine=sysctl.vm.max_map_count=262144
 
# 嵌套虚拟化(用于在 WSL 中运行虚拟机)
nestedVirtualization=false
 
# 调试控制台
debugConsole=false
 
# 使用自定义内核
# kernel=C:\\Users\\YourUsername\\kernel
 
# 使用自定义 init
# initCommand=C:\\Users\\YourUsername\\init

配置说明

memory

  • 默认值:Windows 总内存的 50% 或 8GB(取较小值)
  • 说明:限制 WSL 2 可以使用的最大内存
  • 示例memory=4GBmemory=8192MB

processors

  • 默认值:所有可用 CPU 核心
  • 说明:限制 WSL 2 可以使用的 CPU 核心数
  • 示例processors=4processors=2

swap

  • 默认值:内存大小的 25%
  • 说明:交换空间大小
  • 示例swap=2GBswap=4096MB

swapFile

  • 默认值%USERPROFILE%\AppData\Local\Temp\swap.vhdx
  • 说明:交换文件的位置
  • 注意:使用双反斜杠 \\ 或正斜杠 /

localhostForwarding

  • 默认值true
  • 说明:是否自动转发 localhost 端口
  • 用途:允许从 Windows 访问 WSL 中运行的服务

kernelCommandLine

  • 说明:传递给 Linux 内核的命令行参数
  • 常用参数
    • sysctl.vm.max_map_count=262144 - 增加虚拟内存映射限制(Elasticsearch 等需要)

应用配置

# 修改 .wslconfig 后,需要重启 WSL
wsl --shutdown
 
# 然后重新启动
wsl

发行版配置(wsl.conf)

wsl.conf 文件用于配置特定发行版的设置,位于 Linux 文件系统中。

文件位置

/etc/wsl.conf

配置示例

# 网络配置
[network]
# 生成 /etc/hosts 文件
generateHosts = true
# 生成 /etc/resolv.conf 文件
generateResolvConf = true
# 主机名
hostname = MyWSLHost
 
# 用户配置
[user]
# 默认用户(启动 WSL 时使用的用户)
default = username
 
# 启动配置
[boot]
# 启动时执行的命令
command = "service docker start"
 
# 互操作性配置
[interop]
# 启用与 Windows 的互操作性
enabled = true
# 附加 Windows 路径到 PATH
appendWindowsPath = true
 
# 自动挂载配置
[automount]
# 启用自动挂载 Windows 驱动器
enabled = true
# 挂载点根目录
root = /mnt/
# 挂载选项
options = "metadata,umask=22,fmask=11"
# 跨文件系统操作
crossDistro = false

配置说明

[network]

  • generateHosts:是否自动生成 /etc/hosts 文件
  • generateResolvConf:是否自动生成 /etc/resolv.conf 文件
  • hostname:设置主机名

[user]

  • default:设置默认用户(启动 WSL 时使用的用户)

[boot]

  • command:WSL 启动时执行的命令(每次启动都会执行)

[interop]

  • enabled:是否启用 Windows 互操作性(运行 .exe 文件)
  • appendWindowsPath:是否将 Windows 路径添加到 PATH

[automount]

  • enabled:是否自动挂载 Windows 驱动器
  • root:挂载点根目录(默认 /mnt/
  • options:挂载选项
    • metadata:启用文件元数据
    • umask=22:目录权限掩码(755)
    • fmask=11:文件权限掩码(644)
  • crossDistro:是否跨发行版共享挂载

应用配置

# 编辑配置文件
sudo nano /etc/wsl.conf
 
# 修改后需要重启 WSL
# 在 Windows PowerShell 中
wsl --shutdown
wsl

资源限制

查看当前资源使用

# 查看内存使用
free -h
 
# 查看 CPU 信息
lscpu
nproc  # 显示可用 CPU 核心数
 
# 查看磁盘使用
df -h
 
# 查看进程资源使用
top
htop

限制资源使用

通过 .wslconfig 限制

[wsl2]
# 限制内存为 4GB
memory=4GB
 
# 限制 CPU 核心数为 2
processors=2
 
# 限制交换空间为 2GB
swap=2GB

通过 cgroup 限制(在 Linux 中)

# 创建 cgroup
sudo mkdir -p /sys/fs/cgroup/memory/mygroup
sudo mkdir -p /sys/fs/cgroup/cpu/mygroup
 
# 设置内存限制(1GB)
echo 1073741824 | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
 
# 设置 CPU 限制(50%)
echo 50000 | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
echo 100000 | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_period_us

网络配置

查看网络信息

# 查看 IP 地址
ip addr show
hostname -I
 
# 查看网络接口
ip link show
 
# 查看路由表
ip route show
 
# 查看 DNS 配置
cat /etc/resolv.conf

配置 DNS

方法一:修改 /etc/resolv.conf

# 编辑 DNS 配置
sudo nano /etc/resolv.conf
 
# 添加 DNS 服务器
nameserver 8.8.8.8
nameserver 8.8.4.4

注意:如果 generateResolvConf = true,此文件会被自动覆盖。

方法二:通过 wsl.conf 配置

[network]
generateResolvConf = false

然后手动编辑 /etc/resolv.conf

端口转发

WSL 2 使用虚拟网络,需要配置端口转发才能从 Windows 访问 WSL 中的服务。

自动端口转发(推荐)

.wslconfig 中启用:

[wsl2]
localhostForwarding=true

手动端口转发

# 在 PowerShell(管理员权限)中
# 转发端口 3000
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=$(wsl hostname -I)
 
# 查看端口转发规则
netsh interface portproxy show all
 
# 删除端口转发
netsh interface portproxy delete v4tov4 listenport=3000 listenaddress=0.0.0.0

使用脚本自动配置

创建 portproxy.ps1

$wslIp = (wsl hostname -I).Trim()
$ports = @(3000, 8080, 5000)
 
foreach ($port in $ports) {
    netsh interface portproxy add v4tov4 `
        listenport=$port `
        listenaddress=0.0.0.0 `
        connectport=$port `
        connectaddress=$wslIp
    Write-Host "Forwarded port $port to $wslIp"
}

启动配置

设置默认发行版

# 查看所有发行版
wsl --list
 
# 设置默认发行版
wsl --set-default Ubuntu-22.04

设置默认用户

# 方法一:使用发行版配置工具
ubuntu config --default-user username
 
# 方法二:修改 wsl.conf
# 在 /etc/wsl.conf 中设置
[user]
default = username

启动时自动执行命令

/etc/wsl.conf 中配置:

[boot]
command = "service docker start && service nginx start"

延迟启动

# 设置 WSL 在系统启动时不自动启动
# 需要修改 Windows 注册表或使用任务计划程序

配置文件优先级

  1. 全局配置.wslconfig(Windows 用户目录)
  2. 发行版配置/etc/wsl.conf(Linux 文件系统)
  3. 用户配置~/.bashrc~/.profile

📚 参考资源


返回 WSL 知识体系

WSL 系统配置 资源限制 网络配置