WSL 2 没有可用的全部内存

WSL 2 没有可用的全部内存

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

相关内容