Swappiness на WSL2 сбрасывается до 60

Swappiness на WSL2 сбрасывается до 60

Недавно я пытался установить Ubuntu на Windows (WSL2). Я попробовал команду free, и несколько блоков памяти подкачки были использованы. Я подумал об уменьшении подкачки, поэтому я добавил записьvm.swappiness=10 в /etc/sysctl.conf. Я попробовал перезагрузить sysctl.conf, и это, похоже, сработало. Но когда я попытался закрыть WSL и начать новый сеанс, swappiness был сброшен до значения по умолчанию 60.

Переопределяет ли Ubuntu на WSL2 эту настройку, чтобы снова установить значение 60?

решение1

/etc/sysctl.confобычно анализируется Systemd в Ubuntu при запуске (я полагаю через systemd-sysctl.service). Поскольку WSLне использует Systemd, он не "обрабатывается" при выключении и перезапуске подсистемы WSL. Это похоже на то, что я описал в своем ответе наэтот вопрос Stack Overflow(сейчас читать его нет необходимости, но там есть более подробная информация, если она вам нужна).

Решение (также описанное в этом конкретном ответе) заключается в использовании kernelCommandLineнастройки ядра WSL2:

  • В каталоге Windows %userprofile%(обычно C:\Users\<username>) создайте или отредактируйте файл .wslconfigследующим образом:

    [wsl2]
    kernelCommandLine = "sysctl.vm.swappiness=10"
    
  • Выйдите из Ubuntu на WSL (и любого другого экземпляра WSL)

  • Выполните команду a wsl --shutdownиз PowerShell, CMD или меню «Пуск»

  • Перезапуск

Вы должны обнаружить, что vm.swappinessтеперь это сохраняется. Обратите внимание, что поскольку все сеансы WSL2 используют одно и то же ядро, эта опция будет действовать глобально. Это так, независимо от того, как вы установили swappiness (или любой параметр ядра).

Обратите внимание, что это было протестировано еще в Windows 10 сборки 18363 автором вопроса на Stack Overflow.


Другие альтернативы

Я считаю, что этот .wslconfigвариант, вероятно, является наилучшим для этого, но вы также можете:

  • Используйте /etc/wsl.confс[boot]раздел о Windows 11 для принудительного sysctlзапуска при каждом запуске.
  • Используйте свой профиль пользователя, чтобы запустить его вручную. Если вы пойдете по этому пути, используйте что-то вроде, wsl.exe -u root sysctl --systemчтобы избежать необходимости вводить пароль или настраивать sudoers.

Связанный контент