WSL 性能调优:3 处配置让 ls 从 30 秒变 3 秒
2026/9/9 17:51:27 网站建设 项目流程

WSL 性能调优:3 处配置让 ls 从 30 秒变 3 秒

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

凌晨两点,你在 WSL 终端里敲了一个ls /mnt/c,光标转了三十秒还没回来。这不是玄学——WSL 性能调优要做的,就是把这种"卡"变成"能定位、能改"。这个项目把 Windows 侧的服务和 Linux 发行版装在同一个体系里跑,默认参数偏保守,但每个慢点都有对应的开关,你只需要找到属于你的那一个。

先做三个自检,定位 WSL 卡在哪一环

别急着改配置,先对号入座:

wsl -l -v # 确认是 WSL1 还是 WSL2 free -m # 看内存实际占用 time wsl -e true # 测一次启动耗时
  • wsl -l -v的 VERSION 列显示 2,才谈得上下面的内存和交换区设置;显示 1 的话,升级发行版比调参数有用得多。
  • free -m里 available 长期低于 1GB,是资源分配问题,看场景一。
  • 启动耗时超过 10 秒,大概率是开机项问题,跳场景三。
  • 代码目录在/mnt/c下,那 IO 慢是结构性的,见场景二。

场景一:天天跑 Docker、虚拟机把内存吃满的人

Docker Desktop 的容器其实跑在一台 Hyper-V 轻量虚拟机里,而这台虚拟机默认能拿到的内存是你物理内存的一半。机器 16GB,WSL 就能占到 8GB,Windows 侧开始疯狂换页,于是"跑着跑着就卡"。

改哪个文件:%USERPROFILE%\.wslconfig(没有就新建),加两行:

[wsl2] memory=4GB swap=2GB

这两个参数由 wslservice 在启动虚拟机时读取并下发,所以改完必须wsl --shutdown再重新打开才生效——直接开新终端不算重启。验证:重开后再跑free -m,total 应该正好是你设的 4GB。顺手加一行localhostForwarding=true,WSL 里的服务在浏览器里直接用 localhost 访问,省掉手动记虚拟机 IP 的麻烦。

场景二:代码仓库放在 Windows 盘的人

这是最容易翻车的一环。/mnt/c下的文件走跨系统挂载,WSL2 里底层经 plan9/virtiofs 通道进出,机制在 drvfs 文档 里写得很清楚:每个文件操作都要过一道 Windows 内核,ls转圈多半就转在这。

改哪个文件:发行版内的/etc/wsl.conf,加一行让挂载带上元数据:

[automount] options="metadata"

它解决的是 chmod、chown 这些权限操作真正生效的问题,救不了"慢"本身。真正的解法是搬家:把仓库 clone 到 WSL 内部的/home下,Windows 侧用 VS Code Remote 连进去编辑,形成"编辑在 Windows、跑在 WSL"的分工。验证:对同一个仓库分别在两个目录里跑time git status,差距通常是十倍起步。

场景三:多发行版来回切、开机项越攒越多的人

装过的发行版越多,默认那台机器的开机项就越长。开了 systemd 之后,启动单元动辄上百个,开发机真正需要的可能只有十几个。

改哪个文件:/etc/wsl.conf里先确认 systemd 已开启:

[boot] systemd=true

WSL 对 systemd 的启动方式是 fork 出/sbin/init再等它就绪(细节见 systemd 文档),所以启动等待和服务数量直接挂钩。进系统跑systemctl list-unit-files --type=service --state=enabled看清单,打印机、蓝牙这类用sudo systemctl disable干掉即可。验证:time wsl -e true连测三次取最好成绩,通常能从十几秒压到个位数。

踩坑实录

有人把memory设成 8GB 还抱怨 Windows 更卡——虚拟机内存是启动时就预留的,设得比物理内存还大,等于还没跑就把页文件挤爆了。设成物理内存的三四成比较稳。

我实测时还踩过一个:改完.wslconfig直接开新终端,参数纹丝不动。这个文件只在虚拟机冷启动时读一次,wsl --shutdown才是它对应的"保存并重启",之后一切正常。

还有个反直觉的:swapFile默认写在 C 盘,Windows 和 WSL 抢同一条盘道;把它指到 D 盘,Windows 侧的磁盘 IO 反而干净了,两者同时变快。

一页速查

改什么文件加什么解决什么验证方式
内存上限%USERPROFILE%\.wslconfigmemory=4GBWindows 内存紧张free -m
交换区同上swap=2GB内存峰值超限发行版内top
交换区位置同上swapFile=D:\wsl-swap.vhdxC 盘 IO 挤占观察 C 盘占用
端口转发同上localhostForwarding=true服务要手动记 VM IP浏览器开 localhost:3000
挂载元数据发行版内/etc/wsl.confoptions="metadata"chmod/chown 不生效chmod 后ls -l
开机服务同上 + systemdsystemd=true+systemctl disable启动慢time wsl -e true

以上每项改完都要wsl --shutdown重开才生效。这套配置全部来自 WSL 开源仓库 main 分支的.wslconfig/etc/wsl.conf官方配置接口。

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

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

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

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

立即咨询