WSL 性能调优指南:5 个配置改动,把 WSL2 启动从 45 秒压到 8 秒
【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL
每天在 Windows 上用 WSL(Windows Subsystem for Linux)写代码的人,多半被三件事折磨过:开机慢、编译卡、内存被虚拟机悄悄吃光。这份 WSL 性能优化清单只动 5 个配置点,全部来自微软 WSL 开源仓库提供的官方配置接口,10 分钟改完,冷启动和文件读写速度都会肉眼可见地变快。
🧭 动手前 2 分钟:认准两个配置文件,先给启动拍张"底片"
WSL 的性能开关其实就藏在两个文件里:%USERPROFILE%\.wslconfig在 Windows 侧,决定虚拟机能用多少内存和 CPU;/etc/wsl.conf在每个 Linux 发行版内部,决定开机行为。改之前先量一次基线,否则你根本无从判断优化有没有效果:
time wsl --exec true # 记录当前冷启动耗时,改完再测一次VS Code 中编辑 .wslconfig 并执行 WSL: Connect to WSL,两个配置文件改起来都很顺手
.wslconfig 管"给虚拟机多少资源",/etc/wsl.conf 管"Linux 怎么开机",动手前先分清自己改的是哪一头。
3 行配置给 WSL2 内存设上限,Windows 不再喘气
现象:Windows 一卡,任务管理器里往往是 WSL 占了大半内存,因为 WSL2 默认最高可以吃掉约 50% 物理内存。原因:默认资源分配是"能拿就拿"的保守策略,不设天花板。做法:在.wslconfig里写死上限:
[wsl2] memory=4GB # 建议物理内存的 30%~40% processors=2 # CPU 核数上限 swap=8GB # 交换分区,兜住内存峰值改完执行wsl --shutdown重启虚拟机再验证,内存曲线从此有了上限,Windows 宿主不再被牵连卡顿。
⚡ 启动从 45 秒砍到 8 秒:systemd 只留你需要的服务
WSL 2 支持用 systemd 作为初始化系统,机制可参考仓库内 systemd.md。默认开机会拉起一大票服务,而开发机真正用到的往往只有两三个。在/etc/wsl.conf中启用 systemd:
[boot] systemd=true再进系统清理自启动项:
systemctl list-unit-files --state=enabled # 看看谁在自启 sudo systemctl disable bluetooth cups # 关掉用不到的systemd 按依赖关系拉起所有 enabled 服务,禁掉用不到的单元,启动路径就短了。
编译为什么在 /mnt/c 上慢一倍?把代码搬进 ext4
现象:同一个项目放 C 盘和放 WSL 内部,编译耗时能差 2~3 倍。原因:/mnt/c走的是 DrvFs(Windows 文件系统驱动,每次文件操作都要跨虚拟机边界),原理见 drvfs.md;而/home是 ext4,读写在虚拟机内部闭环。做法:项目git clone到/home下,Windows 侧用 VS Code Remote 连进去编辑——开发在 WSL,编辑在 Windows。
Windows 记事本与 Linux vim 同时编辑两侧文件,跨系统访问正经由 DrvFs,也就是读写瓶颈所在
| 代码放哪 | 读写速度 | 适合场景 |
|---|---|---|
/home下(ext4) | 快 | 代码、依赖、编译产物 |
/mnt/c(DrvFs) | 慢 | 临时交换、读文档 |
/mnt/wsl | 较快 | 多发行版共享数据 |
localhost:3000 打不开?网络转发一次配好
现象:WSL 里npm start起了服务,Windows 浏览器却打不开对应地址。原因:WSL2 默认是 NAT 模式,Linux 里的 localhost 和 Windows 的 localhost 根本不是同一个。做法:在.wslconfig里打开localhostForwarding=true,Linux 监听的端口会自动转发到 Windows 侧;若还需要反向访问 Windows 上的服务,再试networkingMode=mirrored,让两边直接共享 localhost。
左侧 WSL 内 npm start,右侧 Windows 浏览器直接打开 localhost:3000,无需手动端口转发
改完不对劲:3 个高频翻车现场与默认值对照
| 指标 | 默认状态 | 调优后 |
|---|---|---|
| 冷启动 | 30~60 秒 | 8~15 秒 |
| 内存占用 | 最高约 50% 物理内存 | 不超过设定上限 |
| 代码读写 | /mnt/c 上明显偏慢 | 迁回 ext4 快 2~3 倍 |
三个高频翻车现场:内存设太低导致 OOM——把memory回调到物理内存 40% 并保留 swap;在/mnt/c上chmod不生效——那是 DrvFs 的权限模型决定的,给 automount 加metadata选项,或干脆把文件搬进 ext4;服务装完不自启——systemd 环境下要用systemctl enable,而不是update-rc.d。
小结:资源上限、精简服务、文件位置、网络转发,四件事覆盖了 WSL 卡顿的绝大多数场景,改完用开头的time wsl --exec true复测即可验证。进阶方向:用 WSLg 运行 Linux 图形应用并关注 GPU 加速、用 plan9/virtiofs 进一步提升跨系统共享、深入 src/linux/init/config.cpp 理解 init 的配置解析逻辑。
WSLg 让 Linux 图形应用直接开在 Windows 桌面上,配合 GPU 加速体验更佳
【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考