최근 Windows(WSL2)에 Ubuntu를 설치해 보았습니다. 명령 을 시도했지만 free
스왑 메모리 블록이 거의 활용되지 않았습니다. 교환성을 줄일 생각으로 항목 vm.swappiness=10
을 /etc/sysctl.conf
. 다시 로드를 시도했는데 sysctl.conf
작동하는 것 같았지만 WSL을 종료하고 새 세션을 시작하려고 하면 swappiness가 기본값인 60으로 재설정되었습니다.
WSL2의 Ubuntu가 이 설정을 재정의하여 다시 60으로 설정합니까?
답변1
/etc/sysctl.conf
일반적으로 시작 시 Ubuntu의 Systemd에 의해 구문 분석됩니다(저는 를 통해 믿습니다 systemd-sysctl.service
). WSL 이후Systemd를 사용하지 않습니다, WSL 하위 시스템을 종료했다가 다시 시작해도 "처리"되지 않습니다. 이것은 내 답변에서 설명하는 것과 유사합니다.이 스택 오버플로 질문(지금은 읽을 필요가 없지만, 필요하다면 더 자세한 내용이 있습니다).
해결책(특정 답변에서 설명한 대로)은 kernelCommandLine
WSL2 커널에 대한 설정을 사용하는 것입니다.
Windows
%userprofile%
디렉터리(일반적으로 )에서 다음을 사용하여C:\Users\<username>
파일을 생성하거나 편집합니다 ..wslconfig
[wsl2] kernelCommandLine = "sysctl.vm.swappiness=10"
WSL(및 기타 WSL 인스턴스)에서 Ubuntu 종료
wsl --shutdown
PowerShell, CMD 또는 시작 메뉴에서 실행재시작
vm.swappiness
이제 지속되는 것을 발견해야 합니다 . 모든 WSL2 세션은 동일한 커널을 공유하므로 이 옵션은 전역적으로 적용됩니다. 이는 swappiness(또는 커널 매개변수) 설정 방법에 관계없이 적용됩니다.
또한 이는 해당 스택 오버플로 질문의 OP에 의해 Windows 10 빌드 18363 이상까지 테스트되었습니다.
다른 대안
나는 이 옵션이 아마도 가장 적합할 것이라고 생각 .wslconfig
하지만 다음과 같이 할 수도 있습니다.
/etc/wsl.conf
다음과 함께 사용하세요 .[boot]
Windows 11의 섹션에서는sysctl
시작할 때마다 강제로 실행됩니다.- 사용자 프로필을 사용하여 수동으로 실행하세요. 이 경로를 사용하는 경우
wsl.exe -u root sysctl --system
비밀번호를 입력하거나 구성할 필요가 없도록 하는 것과 같은 방법을 사용하세요sudoers
.