在 WSL(Windows Subsystem for Linux)中使用 make
编译项目时,如果发现编译速度非常慢,通常是由以下几个原因导致的。以下是一些常见的排查和优化方法:
🔍 一、常见原因及解决方案
✅ 1. 文件系统性能问题(最常见)
WSL 对 挂载在 /mnt/
下的 Windows 文件系统(如 NTFS)访问性能较差,尤其是大量小文件的读写操作(例如编译过程中的临时文件生成、频繁 IO 操作)。
📌 解决方案:
-
将源代码放在 WSL 的 Linux 文件系统中,而不是 Windows 挂载目录下。
示例路径:
bash# 推荐位置:位于 WSL 根文件系统内 ~/myproject /home/yourname/myproject
❌ 不推荐路径:
bash/mnt/c/Users/yourname/myproject # 来自 Windows 盘符
✅ 2. 禁用实时杀毒软件或索引服务
Windows 的防病毒软件(如 Windows Defender)会对 WSL 中的文件访问进行扫描,显著影响性能。
📌 解决方案:
- 添加 WSL 的项目目录到防病毒软件的排除列表。
- 或者临时禁用防病毒软件测试是否有效果。
✅ 3. 使用 WSL2 而不是 WSL1
如果你还在使用 WSL1,它虽然兼容性好,但文件系统桥接较慢;而 WSL2 使用虚拟化技术,原生 Linux 内核,对编译更友好。
📌 查看当前 WSL 版本:
powershell
wsl --list --verbose
📌 设置默认版本为 WSL2:
powershell
wsl --set-default-version 2
📌 将已有 Ubuntu 分发版升级为 WSL2:
powershell
wsl --set-version Ubuntu 2
✅ 4. 启用更多 CPU 核心 / 内存资源
默认情况下,WSL2 可能只分配了部分 CPU 和内存资源,可以手动设置限制。
📌 创建 .wslconfig
文件(在 Windows 用户目录下):
ini
[wsl2]
memory=8GB
processors=4
然后重启 WSL:
powershell
wsl --shutdown
wsl
✅ 5. 并行编译(启用多线程)
确保你使用的是并行编译方式,比如:
bash
make -j$(nproc)
或者指定具体线程数(例如 4 核):
bash
make -j4
✅ 6. 更新 WSL 和 Ubuntu
确保你的 WSL 和 Ubuntu 是最新版本:
升级 WSL:
powershell
wsl --update
升级 Ubuntu 包:
bash
sudo apt update && sudo apt upgrade -y
🧪 二、测试建议
你可以通过下面命令快速测试一下 WSL 的文件 I/O 性能:
bash
dd if=/dev/zero of=testfile bs=1M count=100 oflag=direct
rm testfile
也可以测试 /tmp
和 /mnt/c
的性能差异,确认是否是文件系统的问题。
📝 三、总结优化建议
问题点 | 建议 |
---|---|
文件系统慢 | 使用 WSL2 + 放在 Linux 文件系统中 |
防病毒干扰 | 排除项目路径 |
编译效率低 | 使用 -j$(nproc) 并行编译 |
资源不足 | 配置 .wslconfig 增加内存和 CPU |
WSL 版本旧 | 更新到 WSL2 |