/etc/sysctl.conf
обычно анализируется Systemd в Ubuntu при запуске (я полагаю, через systemd-sysctl.service
). Начиная с WSL не использует системд, он не обрабатывается при выключении и перезапуске подсистемы WSL. Это похоже на то, что я описываю в своем ответе на этот вопрос о переполнении стека (нет необходимости читать это сейчас, но там есть более подробная информация, если вам это нужно).
Решение (также как я описываю в этом конкретном ответе) состоит в том, чтобы использовать ядроCommandLine
настройка для ядра WSL2:
В вашей Windows %Профиль пользователя%
каталог (обычно C:\Users\<имя пользователя>
) создайте или отредактируйте файл .wslconfig
со следующим:
[wsl2]
kernelCommandLine = "sysctl.vm.swappiness=10"
Выйдите из Ubuntu на WSL (и любой другой экземпляр WSL)
Выпустить wsl --shutdown
из PowerShell, CMD или меню «Пуск»
Рестарт
Вы должны найти это vm.swappiness
теперь сохраняется. Обратите внимание, что поскольку все сеансы WSL2 используют одно и то же ядро, этот параметр будет действовать глобально. Это происходит независимо от того, как вы устанавливаете swappiness (или любой параметр ядра).
Также обратите внимание, что это было протестировано еще по крайней мере в Windows 10 build 18363 OP этого вопроса о переполнении стека.
Другие альтернативы
я верю .wslconfig
вариант, вероятно, лучше всего подходит для этого, но вы также можете:
- Использовать
/etc/wsl.conf
с [ботинок]
раздел на Windows 11 для принудительного sysctl
для запуска при каждом запуске.
- Используйте свой профиль пользователя, чтобы запустить его вручную. Если вы пойдете по этому пути, используйте что-то вроде
wsl.exe -u корневой sysctl --system
чтобы не вводить пароль или настраивать sudoers
.