尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

WSL 性能优化实操:启动慢、编译卡,5 步把终端调快

WSL 性能优化实操:启动慢、编译卡,5 步把终端调快 WSL 性能优化实操启动慢、编译卡5 步把终端调快【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL每次敲wsl终端干等半分钟才出提示符这份 WSL 性能优化实操手册从 3 条命令的体检开始再给 3 个立竿见影的快改、一套 WSL 调优深水区配置网络、服务、内核最后用数据验收。所有改动都是纯文本配置文件随时可回滚不用重装发行版。 第一步体检用 3 条命令定位 WSL 卡顿瓶颈WSL 卡顿的原因通常就三种资源不够、IO 走错路径、后台服务太多。先逐项查再谈怎么改。内存WSL2 是不是吃掉了半台机器free -m为什么看这个WSL2 本质是 Hyper-V 轻量虚拟机默认拿走 50% 物理内存。如果 total 是个吓人的大数、used 又贴着它涨Windows 侧的卡顿就是 WSL 的锅。路径你的项目在哪pwd为什么看这个如果输出以/mnt/c/开头IO 瓶颈基本可以锁定。这条路是 DrvFs 驱动挂载的 Windows 文件系统每次读写都要跨界一次性能明显差于发行版内部的 ext4。服务systemd 启动要多久ps -p 1 -o comm systemd-analyze为什么看这个ps确认 1 号进程是 systemd 时才需要关心启动耗时systemd-analyze输出的Startup finished in那行超过 10 秒说明服务精简有空间。顺手在 Windows 侧确认一下各发行版的版本和状态——后面要强调资源限制只对 WSL2 生效。⚡ 第二步快改三招5 分钟见效1. .wslconfig 内存限制怎么配在用户主目录新建.wslconfigPowerShell 里执行notepad $env:USERPROFILE\.wslconfig[wsl2] memory4GB processors2 swap2GB为什么写这三行写死之后WSL2 的内存峰值就可预期不再和 Windows 抢。32GB 内存的机器默认拿走 16GB再开浏览器、游戏必卡。保存后执行wsl --shutdown重启虚拟机生效在发行版里exit是没用的。2. 项目代码别放 /mnt/cWSL 文件 IO 卡顿的根源mkdir -p ~/projects cd ~/projects git clone 你的仓库地址 myrepo为什么这么做大项目node_modules、.git 这类海量小文件 IO在/mnt/c下编译耗时可能是 WSL 内部的 3~10 倍。代码挪到发行版内部编辑用 VS Code Remote 从 Windows 侧连进去编辑在 Windows、编译在 WSL数据始终留在快的一侧。3. 量一下 shell 启动冷启动常被 bashrc 拖慢time bash -i -c exit为什么查这个很多人把 alias、环境变量、插件加载全塞进~/.bashrc每次开终端都执行一遍。超过 1 秒就该清理这部分省下的时间会直接折算进冷启动。 第三步深度调优按子系统下手NAT 还是 bridgedWSL2 网络模式怎么选默认 NAT 模式下WSL2 拿到的是 172.x 段的内部 IPWindows 侧能 localhost 转发但局域网里其他设备碰不到你 WSL 里的服务。要跑 Node 服务给手机调试改成桥接[wsl2] networkingModebridged为什么这么做桥接模式下 WSL2 获得和主机同网段的真实 IP整个局域网都能访问。需要管理员权限建议 Win11 或较新的 Win10。改完同样wsl --shutdown重启生效。用 Docker 的同学注意换完网络模式容器端口要重新确认一遍别以为服务没挂上。systemd 服务精简别让它全量自启systemctl list-unit-files --typeservice --stateenabled sudo systemctl disable bluetooth.service cups.service avahi-daemon.service为什么这么做新装发行版开了 systemd 后默认自启几十个服务其中蓝牙、打印、Avahi 在虚拟机里几乎无用。精简既压缩冷启动时间也降低空闲 CPU 占用。systemd 在 WSL 下的工作机制可参考 doc/docs/technical-documentation/systemd.md。sysctl 内核参数内存受限环境的回收策略echo vm.swappiness10 | sudo tee -a /etc/sysctl.d/99-wsl-tuning.conf echo vm.vfs_cache_pressure50 | sudo tee -a /etc/sysctl.d/99-wsl-tuning.conf sudo sysctl --system为什么这么做默认swappiness60时系统乐于把页缓存换出去apt、编译刚跑完缓存就被回收下一次操作变慢。压低这两个值热文件更可能留在内存里。DrvFs 挂载选项不得不走 /mnt/c 时[automount] optionsmetadata,umask22,fmask11写到/etc/wsl.conf。为什么加metadata不加的话你在/mnt/c上chmod/chown的结果重启即丢加上后权限元数据会持久化到 Windows 文件系统。WSL 的 init 进程启动时读取该配置并处理挂载选项相关源码见 src/linux/init/config.cpp。GUI 应用顺手把 WSLg 开起来如果你还在用 X 转发跑 Linux 桌面程序换成 WSLg原生 Windows 窗口直出无需 X server还支持 GPU 渲染窗口打开速度是另一个量级。 第四步用数据说话WSL 性能基准测试冷启动是最直观的优化前后指标在 PowerShell 里跑Measure-Command { wsl -d Ubuntu --exec true }为什么跑 3 遍取最优wsl --shutdown后的首跑包含完整的虚拟机冷启动后面略快两种情况分别记录、同条件对比才公平。顺序写对比两类路径把测试文件放在两个位置各跑一遍dd if/dev/zero of/tmp/t.bin bs1M count2048 oflagdirect; rm /tmp/t.bin dd if/dev/zero of/mnt/c/t.bin bs1M count2048 oflagdirect; rm /mnt/c/t.bin为什么加oflagdirect绕过页缓存测的是真实路径表现而不是内存的速度。内存监控长构建任务挂着watch -n 2 free -m观察占用是否稳定在.wslconfig限额之下。16GB 机器 Ubuntu 24.04 的参考值你的机器数字会不同看趋势指标调优前调优后冷启动wsl --exec true约 25s约 8s2GB dd 直写内部路径3.2s3.1s2GB dd 直写/mnt/c19s17s同一容器构建的内存峰值14.2GB4.1GB/mnt/c提升不大是正常的——DrvFs 的瓶颈在跨界协议而非带宽真正的收益来自把项目挪进去。这张表主要证明资源上限和服务精简的效果。 第五步踩坑与回滚配置改坏了怎么恢复坑 1改了 .wslconfig 后 WSL 起不来、黑屏。先在 Windows 侧wsl --shutdown仍不行就检查 memory 是否超过物理内存、数值是否带单位4GB而不是4。它是纯文本删掉文件即恢复默认。坑 2切到 bridged 后断网。先ping 8.8.8.8定位ping 不通外网多半是路由器或网卡防火墙拦了虚拟交换机。先改回networkingModenat重启恢复联网确有局域网访问需求先去路由器放行再开桥接。坑 3服务精简过头systemd 功能坏了。用journalctl -b -p err找报错systemctl enable把相关服务加回来。systemd 单元状态本质只是符号链接恢复很容易不必重装。回滚原则前文所有改动只有三类纯文本——配置文件.wslconfig、/etc/wsl.conf、符号链接systemd 单元、sysctl.d 文件删掉即回滚。唯一要留神的是wsl --shutdown会切断所有运行中的虚拟机操作前先保存工作。其实最有效的 WSL 调优往往不是高深技巧而是把默认值改对.wslconfig三行、项目搬家、服务精简几行大多数卡顿到此为止。想再进一步可以研究 WSLg 的 GPU 加速配置或读一读 init 的启动流程找新的精简点。【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表