Недавно я пытался установить 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
.