WSL 2 没有所有可用内存

Dak*_*own 15 memory windows-10 wsl2

我知道有关 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

Run Code Online (Sandbox Code Playgroud)

wsl.confUbuntu 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:~$
Run Code Online (Sandbox Code Playgroud)

.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
Run Code Online (Sandbox Code Playgroud)

WSL 正在运行版本 2:

PS C:\Users\dakot> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         2
  docker-desktop-data    Running         2
  docker-desktop         Running         2
Run Code Online (Sandbox Code Playgroud)

Not*_*1ds 22

前言

是否有办法确保 Windows 拥有的所有内存在 WSL 中也可用?或者是出于特定原因为系统保留的?

“全部”记忆?不。Windows 必须有一些东西可以运行,而且它无论如何都不是一个轻量级操作系统。4GB 是 Windows 11 的最低系统要求。如果比这个少一点,也许可以,但这不是一个好主意。

“特定用途”?确实有很多。您的桌面、任务栏、网络堆栈、GPU(特别是集成的)、数十种服务(请参阅“服务”插件),例如事件日志等。

更不用说需要为任何应用程序(例如网络浏览器)留出空间。

但是,如果您确实需要增加 WSL2 可用的内存量,请继续阅读。

简短回答:

首先通过 确认 WSL2 当前可用的实际内存量top。然后,如果您确实需要增加它:

关闭 WSL,然后从 PowerShell 中:

Write-Output "[wsl2]
memory=26GB" >> "${env:USERPROFILE}\.wslconfig"

wsl --shutdown
Run Code Online (Sandbox Code Playgroud)

并重新启动 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
Run Code Online (Sandbox Code Playgroud)

我感觉您的 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
Run Code Online (Sandbox Code Playgroud)

您会注意到可用交换空间也增加了,因为它(默认情况下)配置为可用内存的 25%。这也可以通过 来控制.wslconfig