「wsl慢,wsl慢」 CPU/内存吸血鬼
你一定见过Chrome 和 Android Studio 关于内存和 CPU
巨大消耗的情况。
嗯...我认为我们有一个新的「王者」。
国王已死,新国王万岁。 陛下:WSL! 👑
这是因为有一个已知问题 "WSL 2 消耗大量 RAM" 。
解决方案
这不是一个确定的解决方案,但我们可以使用一些高级配置来设置 WSL来限制他的资源。
接下来的所有工作都需要在 PowerShell(Windows 端)上完成。
首先,我们需要关闭所有正在使用 WSL 的终端,然后将其关闭以避免运行命令时数据损坏wsl --shutdown
。
.wslconfig
在Windows用户配置文件路径下创建一个文件。
bash
# PowerShell
cd $env:USERPROFILE
New-Item -Path '.wslconfig' -ItemType File
使用 VSCode(或任何您喜欢的编辑器)打开此文件
bash
# PowerShell
code .wslconfig
并设置可以占用的最大资源量的限制(根据您的需要)。例如:
ini
# Settings apply across all Linux distros running on WSL 2
[wsl2]
# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=4GB
# Sets the VM to use two virtual processors
processors=2
# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=8GB
# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx
swapfile=D:\WSL\wsl-swap.vhdx
# Turn off default connection to bind WSL 2 localhost to Windows localhost
localhostforwarding=true
有关更多WSL 高级配置,请查看文档。
保存文件并重新启动 WSL 运行wsl
命令。
无论 Linux
内存使用情况如何,它仍然会消耗整个 4GB,并且只有 2 个虚拟处理器,但至少它不会再增长更多。
实验性的
WSL
有一个新的实验版本,可以更好地管理内存。
所有后续步骤都需要在 PowerShell(Windows 端)上完成。
备份
首先,我们需要关闭所有正在使用 WSL 的终端,然后将其关闭以避免运行命令时数据损坏。
perl
# PowerShell
wsl --shutdown
接下来,我们将从Ubuntu
Linux 发行版创建备份。
bash
# PowerShell
mkdir D:\backup
wsl --export Ubuntu D:\backup\ubuntu.tar
如果您没有看到进度指示器,请不要担心。这可能需要一段时间,具体取决于您拥有的数据量。
看过前面几篇文章的童鞋知道现在是休息时间。
完成后,首先,更重要的是确保 该D:\backup\ubuntu.tar
文件存在。
更新
⚠️ 请注意,WSL 驱动器上存储的所有内容都可能会丢失,并且该命令不会要求确认,因此请确保先备份所需的所有内容!
css
# PowerShell
wsl --update
wsl --update --pre-release
配置
.wslconfig
使用 VSCode(或任何您喜欢的编辑器)再次打开文件
bash
# PowerShell
code .wslconfig
并设置实验标志(根据您的需要)。例如:
ini
[experimental]
# Automatic memory reclaim
autoMemoryReclaim=gradual
# Automatic disk space clean up
sparseVhd=true
最后使用wsl
或wsl --distribution <DistroName>
命令重新启动 WSL。
选择
如果 WSL
仍然存在问题,您可以使用 Git Bash
。它不是像 WSL
那样的"真正的"Linux
发行版,但它是在 Windows 内模拟Unixish环境的一个很好的替代方案。
跨文件系统的文件存储和性能
建议不要跨操作系统使用文件,除非有这么做的特定原因。 若想获得最快的性能速度,请将文件存储在 WSL 文件系统中,前提是在 Linux 命令行(Ubuntu、OpenSUSE 等)中工作。 如果使用 Windows 命令行(PowerShell、命令提示符)工作,请将文件存储在 Windows 文件系统中。
例如,在存储 WSL 项目文件时:
- 使用 Linux 文件系统根目录:
\wsl$\Ubuntu\home<user name>\Project
- 而不使用 Windows 文件系统根目录:
/mnt/c/Users/<user name>/Project$
或C:\Users<user name>\Project
在 WSL 命令行的文件路径中看到 /mnt/
时,表示你正在使用已装载的驱动器。 因此,Windows 文件系统 C:/ 驱动器 (C:\Users<user name>\Project
) 在 WSL 命令行中装载时将如下所示:/mnt/c/Users/<user name>/Project$
。 可以将项目文件存储在装载的驱动器上,但如果将其直接存储在 \wsl$
驱动器上,性能速度会提高。
参考官方文档 : 跨文件系统工作 | Microsoft Learn
折腾使你进步!!!🤪