我知道关于 WSL/2 的大多数问题都是关于减少内存使用情况,但我的有点不同。我在 Windows 中有 32 GB 可用,但 WSL2 只允许我使用其中的 24 GB。有没有办法确保 Windows 的所有内存在 WSL 中也可用?或者这是出于特定原因为系统保留的?
Windows 版本:
PS C:\Users\dakot> [System.Environment]::OSVersion.Version
Major Minor Build Revision
----- ----- ----- --------
10 0 19044 0
wsl.conf
在 Ubuntu WSL 实例中不存在:
dakota@DESKTOP-1KK3IBB:~$ cat /etc/wsl.conf
cat: /etc/wsl.conf: No such file or directory
dakota@DESKTOP-1KK3IBB:~$ ls /etc | grep wsl
dakota@DESKTOP-1KK3IBB:~$
.wslconfig
在我的目录中找不到%UserProfile%
:
PS C:\Users\dakot> ls
Directory: C:\Users\dakot
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 3/2/2022 9:46 AM .aws
d----- 3/2/2022 9:46 AM .azure
d----- 3/1/2022 8:22 AM .docker
d----- 2/28/2022 3:31 PM .dotnet
d----- 2/28/2022 2:50 PM .gnupg
d----- 3/1/2022 8:07 AM .vscode
d-r--- 2/28/2022 1:48 PM 3D Objects
d-r--- 2/28/2022 1:48 PM Contacts
d-r--- 3/1/2022 1:15 PM Desktop
d-r--- 3/1/2022 7:43 AM Documents
d-r--- 3/2/2022 11:29 AM Downloads
d-r--- 2/28/2022 1:48 PM Favorites
d-r--- 2/28/2022 1:48 PM Links
d-r--- 2/28/2022 1:48 PM Music
dar--- 3/1/2022 12:32 PM OneDrive
d-r--- 2/28/2022 1:49 PM Pictures
d----- 2/28/2022 2:35 PM Postman
d-r--- 2/28/2022 1:48 PM Saved Games
d-r--- 2/28/2022 1:49 PM Searches
d----- 3/1/2022 9:30 PM source
d-r--- 2/28/2022 3:05 PM Videos
d----- 3/1/2022 8:14 AM wkspaces
-a---- 2/28/2022 2:46 PM 144 .gitconfig
-a---- 2/27/2022 10:08 PM 780 id_ecdsa
WSL 正在运行版本 2:
PS C:\Users\dakot> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
docker-desktop-data Running 2
docker-desktop Running 2
答案1
前言
有没有办法确保 Windows 的所有内存在 WSL 中也可用?还是因为特定原因而为系统保留的?
“全部”内存?不。Windows 必须有一些东西来运行,而且它绝不是一个轻量级操作系统。4GB 是 Windows 11 的最低系统要求。它可能可以使用比这少一点的内存,但这不是一个好主意。
“特定用途”?确实有很多。您的桌面、任务栏、网络堆栈、GPU(尤其是集成的 GPU)、数十种服务(请参阅“服务”插件),例如事件日志等。等等。等等。
更不用说需要为任何应用程序(例如您的网络浏览器)留出空间。
但是,如果您确实需要增加 WSL2 可用的内存量,请继续阅读。
简短回答:
首先通过 确认 WSL2 当前可用的实际内存量top
。然后,如果你确实需要增加它:
关闭 WSL,然后从 PowerShell:
Write-Output "[wsl2]
memory=26GB" >> "${env:USERPROFILE}\.wslconfig"
wsl --shutdown
然后重新启动 WSL。请注意,此命令仅在您没有现有文件.wslconfig
(您已确认没有)的情况下才能正常工作。运行该命令一次后,您需要手动编辑该文件以进行将来的更改。
解释:
正如 Ramhound 在评论中链接的文档中所述,可以通过使用文件来调整 WSL2 可用的内存量.wslconfig
。它可以减少(正如您注意到的通常情况),也可以增加(正如我刚刚在我的系统上确认的那样)。
如果您的系统允许在 WSL 中使用 24GB,那么这可能是系统内存和交换的组合。
您没有提到如何检查内存量,但“简单的方法”是top
在 WSL 中运行命令:
你会看到类似这样的内容:
top - 20:08:13 up 0 min, 0 users, load average: 0.00, 0.00, 0.00
Tasks: 5 total, 1 running, 4 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 15955.3 total, 15581.8 free, 275.7 used, 97.8 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 15469.9 avail Mem
我感觉你的 WSL 默认可能有 16GB,但我可能错了。
在使用上述方法将我的内存从 16GB 更改为 24GB 后,我得到了以下结果:
top - 19:54:19 up 3 min, 0 users, load average: 0.00, 0.00, 0.00
Tasks: 9 total, 1 running, 8 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 24039.29+total, 23622.06+free, 291.879 used, 125.352 buff/cache
MiB Swap: 6144.000 total, 6144.000 free, 0.000 used. 23477.43+avail Mem
您会注意到可用的交换空间也增加了,因为它默认配置为可用内存的 25%。这也可以通过 进行控制.wslconfig
。