☰
WSL性能调优:3个配置文件实测,启动快了78%
2026/10/21 11:45:39 网站建设 项目流程

WSL性能调优:3个配置文件实测,启动快了78%

【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL

第一次把 1.2GB 的模型权重文件从 Windows 拖进 WSL(Windows Subsystem for Linux,微软官方开源的 Windows Linux 子系统),/mnt/c的进度条爬了两分钟,我怀疑是 SSD 坏了。查完才发现:文件每次读写都要穿过 drvfs 这个 Windows 文件系统驱动,写进去只有 12MB/s。后来我改了 3 个配置文件,同样操作 8 秒搞定,冷启动从 41 秒压到 9 秒。下面是这次 WSL 性能调优的完整记录,全程不碰内核。

动手前先定位——你的瓶颈卡在哪

别急着抄配置,先花两分钟确认你的机器到底卡在哪:

  • time wsl -d Ubuntu -e true(先wsl --shutdown再测):盯总秒数。5 秒内算正常,30 秒以上就是启动瓶颈,问题多半出在服务拉起来的数量和 automount 上。
  • 各跑一次dd if=/dev/zero of=/home/u/a bs=1M count=2048 oflag=direct和dd ... of=/mnt/c/b bs=1M count=2048 oflag=direct:盯两行 write/s 的差值。差 2~5 倍是正常(drvfs 天生要过一遍 NTFS),差 10 倍以上说明项目放错位置了。
  • 虚拟机里free -h,加上 PowerShell 里的wsl -l -v:盯 VM 总共吃了多少内存。没写过.wslconfig却占到物理内存一半以上,基本就是分配问题。

按配置文件逐个改——从慢到快的实操记录 ⚡️

改.wslconfig:把 WSL2 的内存和 CPU 配额锁死

文件在 Windows 侧%USERPROFILE%\.wslconfig,没有就新建。WSL2 本质是一台 Hyper-V 轻量虚拟机,这个文件就是开机时塞给它的配额单,也是 WSL2 内存限制配置的核心:

[wsl2] memory=4GB # 内存上限,建议物理内存的30%~40% processors=2 # CPU上限,给Windows留点 swap=2GB # 虚拟机内虚拟交换,防OOM localhostForwarding=true # Windows的localhost自动转发到WSL

改完在 PowerShell 里跑wsl --shutdown,下次开机生效。效果:VM 内存封顶,"WSL 一开 Windows 就卡"基本消失。

⚠️ 注意:不写 memory 时 WSL2 默认吃物理内存的 50%,这是大多数"卡"的第一嫌疑,改之前先确认这一项。

改/etc/wsl.conf:把开机流程精简到只留必要项

init 进程开机时"干什么、挂什么"全看这个文件,解析逻辑在 src/linux/init/config.cpp。我改成了这样:

[boot] systemd=true # 用systemd服务才需要,否则删掉这一行 [automount] enabled=true mountFsTab=false # 跳过fstab自动挂载,少一个开机环节 options="metadata,umask=22" # metadata:允许对/mnt/c做chmod/chown

改完wsl --terminate <发行版名>再启动。效果:启动路径短一截,开机快几秒,/mnt/c下 Linux 权限命令不再报错。

💡 提示:systemd 模式下的服务精简用systemctl disable,别用update-rc.d;systemd 在 WSL 里的行为细节见 doc/docs/technical-documentation/systemd.md。

改/etc/sysctl.conf:文件句柄和内存回收策略调稳

前两条照顾开一堆文件的 node 和编译场景,后两条管缓存怎么回收:

fs.file-max=1000000 # 文件描述符上限,防node场景爆句柄 vm.swappiness=10 # 优先回收页缓存,少换出内存 vm.vfs_cache_pressure=50 # dentry回收慢一点,重复读取更快

改完sudo sysctl -p立即生效。效果:重复编译和npm ci明显变快,单项提升不算夸张,但稳定。

⚠️ 注意:这些参数作用在 VM 自己的内核上,改坏不影响 Windows 宿主机,大胆试。

网络:.wslconfig再加一行,少一层 NAT 转发

常访问 GitHub 等外网、觉得 NAT 模式转发肉的话,在[wsl2]段里补一行:

networkingMode=mirrored # 与宿主机共享网络,省掉NAT转发层

wsl --shutdown重启后,两侧localhost:端口直接互通,开发调试不再手动配端口转发。

改完长什么样——前后对比 ✅

指标改前改后变化
冷启动(Ubuntu 24.04)41 秒9 秒快 78%
1GB 写入(/mnt/c 下)90 秒8 秒(挪进 /home)快 91%
WSL2 常驻内存(16GB 物理内存)7.8GB4.1GB降 47%
npm install(200 个依赖)420 秒96 秒快 77%

你机器配置不同,数字会有出入,量级参考即可:重点看每一项是不是掉了量级,而不是纠结具体秒数。

这些坑我替你踩了

第一个:我盯着/etc/wsl.conf逐行检查,怎么都觉得没问题,重启后还是慢。当时以为是配置写错了,结果是改完没跑wsl --terminate,发行版还带着旧配置在跑——这个文件只在下次启动时被读取。一条wsl --terminate <发行版名>解决。

第二个:.wslconfig加了 memory=4GB,free -h一看 VM 还在吃 11GB,以为限制根本没生效。原因是虚拟机当时还活着,而这个文件只在 VM 冷启动时被读取。wsl --shutdown一下就好了,这条命令是整个 WSL 性能调优过程里最被低估的。

第三个:开了 metadata 之后,我以为chmod能改 Windows 侧文件权限,结果 Windows 文件属性纹丝不动。drvfs 本质是 NTFS 的视图,metadata 只保证 Linux 侧工具不报错,不会回写 Windows ACL。结论:需要严格权限管理的文件别放/mnt/c,放/home下面。

收藏这张表就够了

配置文件关键项一句话说明
%USERPROFILE%\.wslconfigmemory / processors / swap / localhostForwarding / networkingMode锁死 VM 资源配额,wsl --shutdown冷启动生效
/etc/wsl.conf[boot] systemd/[automount] options精简启动流程,开 metadata,wsl --terminate生效
/etc/sysctl.conffs.file-max / vm.swappiness / vm.vfs_cache_pressure内核参数微调,sudo sysctl -p立即生效
两条兜底命令wsl --shutdown/wsl --terminate改了配置没生效?先跑这两条再排查

WSL 仓库会不定期给这两个配置文件加新字段,动手前先到 doc/docs/technical-documentation/ 对照一遍最新行为;想再深一层,顺着 init 进程和 wslservice.exe 的通信路径读下去,就知道还能拧哪些螺丝。

【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询