El intercambio en WSL2 se restablece a 60

El intercambio en WSL2 se restablece a 60

Recientemente intenté instalar Ubuntu en Windows (WSL2). Probé el freecomando y se utilizaron algunos bloques de memoria de intercambio. Pensé en reducir el intercambio, así que agregué la entrada vm.swappiness=10en /etc/sysctl.conf. Intenté recargar sysctl.confy pareció funcionar, pero cuando intenté cerrar WSL e iniciar una nueva sesión, el intercambio se restableció al valor predeterminado de 60.

¿Ubuntu en WSL2 está anulando esta configuración para volver a ser 60?

Respuesta1

/etc/sysctl.confSystemd generalmente lo analiza en Ubuntu al inicio (creo que a través de systemd-sysctl.service). Desde WSLno usa systemd, no se "maneja" cuando apaga y reinicia el subsistema WSL. Esto es similar a lo que describo en mi respuesta aesta pregunta de desbordamiento de pila(No es necesario leerlo ahora, pero tiene más detalles si los necesitas).

La solución (también como lo describo en esa respuesta particular) es usar la kernelCommandLineconfiguración para el kernel de WSL2:

  • En su %userprofile%directorio de Windows (normalmente C:\Users\<username>), cree o edite el archivo .wslconfigcon lo siguiente:

    [wsl2]
    kernelCommandLine = "sysctl.vm.swappiness=10"
    
  • Salga de Ubuntu en WSL (y cualquier otra instancia de WSL)

  • Emitir un wsl --shutdowndesde PowerShell, CMD o el menú Inicio

  • Reanudar

Deberías encontrar que vm.swappinessahora persiste. Tenga en cuenta que, dado que todas las sesiones de WSL2 comparten el mismo kernel, esta opción tendrá efecto globalmente. Este es el caso independientemente de cómo configure el intercambio (o cualquier parámetro del kernel).

Tenga en cuenta también que esto ha sido probado desde al menos Windows 10 compilación 18363 por el OP de esa pregunta de Stack Overflow.


Otras alternativas

Creo que la .wslconfigopción probablemente sea la mejor para esto, pero también podrías:

  • Usar /etc/wsl.confcon el[boot]sección en Windows 11 para forzar sysctlla ejecución en cada inicio.
  • Utilice su perfil de usuario para ejecutarlo manualmente. Si sigue esta ruta, use algo como wsl.exe -u root sysctl --systempara evitar tener que escribir una contraseña o configurar sudoers.

información relacionada