17 votos

WSL 2 no tiene toda la memoria disponible para él

La mayoría de las preguntas sobre WSL/2 son sobre reducir el uso de memoria, pero la mía es un poco diferente. Tengo 32 GB disponibles en Windows, pero WSL2 solo me permite usar hasta 24 de eso. ¿Hay alguna manera de asegurarse de que toda la memoria que tiene Windows también esté disponible en WSL? ¿O está reservada para el sistema por alguna razón específica?

Compilación de Windows:

PS C:\Users\dakot> [System.Environment]::OSVersion.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
10     0      19044  0

wsl.conf no existe en la instancia de 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 no se encuentra en mi directorio %UserProfile%:

PS C:\Users\dakot> ls

    Directorio: 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 está ejecutando la Versión 2:

PS C:\Users\dakot> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         2
  docker-desktop-data    Running         2
  docker-desktop         Running         2

26voto

NotTheDr01ds Puntos 158

Prefacio

¿Hay alguna manera de asegurarse de que toda la memoria que tiene Windows también esté disponible en WSL? ¿O está reservada para el sistema por una razón específica?

¿"Toda" la memoria? No. Windows necesita algo para funcionar, y no es un sistema operativo liviano en absoluto. 4GB es el requisito mínimo del sistema para Windows 11. Probablemente pueda funcionar con un poco menos que eso, pero no es una buena idea.

¿"Propósito específico"? Hay muchos, realmente. Tu escritorio, barra de tareas, pila de red, GPU (especialmente si es integrada), docenas de servicios (ver el complemento "Servicios") como el registro de eventos, etc. etc. etc.

Sin mencionar que necesita espacio disponible para cualquier aplicación como tu navegador web.

Sin embargo, si realmente necesitas aumentar la cantidad de memoria disponible para WSL2, entonces sigue leyendo.

Respuesta corta:

Primero confirma la cantidad real de memoria actualmente disponible para WSL2 a través de top. Luego, si realmente necesitas aumentarla:

Cierra WSL, y luego desde PowerShell:

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

wsl --shutdown

Y reinicia WSL. Ten en cuenta que este comando solo funcionará correctamente siempre y cuando no tengas un archivo .wslconfig existente (lo cual has confirmado que no tienes). Después de ejecutar ese comando una vez, deberás editar manualmente el archivo para realizar cambios futuros.

Explicación:

Como se menciona en el documento que Ramhound enlazó en los comentarios, la cantidad de memoria disponible para WSL2 puede ajustarse a través del uso de un archivo .wslconfig. Puede ser disminuida (como generalmente es el caso), o aumentada (como acabo de confirmar en mi sistema).

Si tu sistema permite 24GB de uso en WSL, entonces eso puede ser una combinación de memoria del sistema e intercambio.

No mencionas cómo estás comprobando la cantidad de memoria, pero la forma "fácil" es simplemente ejecutar el comando top en WSL:

Verás algo como:

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

Tengo la sensación de que tu WSL probablemente tenga 16GB por defecto, pero puedo estar equivocado.

Después de cambiar la mía de 16GB a 24GB usando el método mencionado anteriormente, tengo lo siguiente:

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

Notarás que el intercambio disponible también aumentó, ya que está configurado (por defecto) como el 25% de la memoria disponible. Esto también se puede controlar a través de .wslconfig.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X