WSL2의 Swappiness는 60으로 재설정됩니다.

WSL2의 Swappiness는 60으로 재설정됩니다.

최근 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 하위 시스템을 종료했다가 다시 시작해도 "처리"되지 않습니다. 이것은 내 답변에서 설명하는 것과 유사합니다.이 스택 오버플로 질문(지금은 읽을 필요가 없지만, 필요하다면 더 자세한 내용이 있습니다).

해결책(특정 답변에서 설명한 대로)은 kernelCommandLineWSL2 커널에 대한 설정을 사용하는 것입니다.

  • Windows %userprofile%디렉터리(일반적으로 )에서 다음을 사용하여 C:\Users\<username>파일을 생성하거나 편집합니다 ..wslconfig

    [wsl2]
    kernelCommandLine = "sysctl.vm.swappiness=10"
    
  • WSL(및 기타 WSL 인스턴스)에서 Ubuntu 종료

  • wsl --shutdownPowerShell, CMD 또는 시작 메뉴에서 실행

  • 재시작

vm.swappiness이제 지속되는 것을 발견해야 합니다 . 모든 WSL2 세션은 동일한 커널을 공유하므로 이 옵션은 전역적으로 적용됩니다. 이는 swappiness(또는 커널 매개변수) 설정 방법에 관계없이 적용됩니다.

또한 이는 해당 스택 오버플로 질문의 OP에 의해 Windows 10 빌드 18363 이상까지 테스트되었습니다.


다른 대안

나는 이 옵션이 아마도 가장 적합할 것이라고 생각 .wslconfig하지만 다음과 같이 할 수도 있습니다.

  • /etc/wsl.conf다음과 함께 사용하세요 .[boot]Windows 11의 섹션에서는 sysctl시작할 때마다 강제로 실행됩니다.
  • 사용자 프로필을 사용하여 수동으로 실행하세요. 이 경로를 사용하는 경우 wsl.exe -u root sysctl --system비밀번호를 입력하거나 구성할 필요가 없도록 하는 것과 같은 방법을 사용하세요 sudoers.

관련 정보