본문 바로가기
Linux

WSL2 메모리·디스크 용량 과다 사용 줄이기: .wslconfig 설정과 ext4.vhdx 관리

by 바른정보블로그 2026. 8. 18.

WSL2 메모리와 디스크 용량 과다 사용 줄이기 wslconfig 설정 안내 이미지

WSL2로 우분투를 쓰다 보면 두 가지가 거슬립니다. 작업 관리자에서 Vmmem 또는 vmmemWSL이 램을 몇 GB씩 잡고 있고, C드라이브 용량은 안에서 파일을 지워도 줄지 않습니다. 둘 다 WSL2가 가상 머신과 가상 하드 디스크(VHD) 위에서 돌아가기 때문에 생기는 현상입니다. 마이크로소프트 공식 문서 기준으로 어디까지 조절할 수 있는지 정리했습니다.

빠른 결론

  • 메모리는 기본값이 윈도우 전체 램의 50%이고, .wslconfig에서 직접 상한을 정할 수 있습니다.
  • ext4.vhdx는 쓰면 커지고 자동으로 줄어들지 않습니다. 공식 문서는 확장 방법만 안내합니다.
  • 설정을 바꾼 뒤에는 반드시 wsl --shutdown으로 완전히 내렸다 올려야 반영됩니다.

기준: 2026년 8월 18일 확인, Microsoft Learn의 WSL 고급 설정 구성 문서와 디스크 공간 관리 문서.

증상별로 무엇을 건드려야 하나

증상 원인 설정 위치
램을 계속 점유 기본 할당이 전체 램의 50% .wslconfig의 memory
CPU가 전부 물림 윈도우 논리 프로세서 수와 동일하게 할당 .wslconfig의 processors
캐시 메모리가 안 빠짐 자동 회수 방식 차이 .wslconfig의 autoMemoryReclaim (실험 기능)
스왑 파일이 큼 기본값이 메모리의 25% .wslconfig의 swap, swapFile
디스크가 계속 커짐 VHD 최대 할당이 1TB, 사용한 만큼 확장 .wslconfig의 defaultVhdSize, sparseVhd

1단계. 현재 상태부터 확인하기

  1. 시작 메뉴에서 PowerShell을 엽니다.
  2. wsl --version을 입력해 WSL 버전을 확인합니다. 이 명령을 인식하지 못하면 스토어 버전으로 업데이트가 필요합니다.
  3. wsl --list --verbose로 설치된 배포판 이름과 WSL 버전(1 또는 2)을 확인합니다. .wslconfig 설정은 WSL 2에만 적용됩니다.
  4. 디스크 사용량은 wsl.exe --system -d 배포판이름 df -h /mnt/wslg/distro로 봅니다. 이 명령이 안 되면 wsl df -h /를 씁니다.

여기서 Size 항목이 1T로 보여도 놀랄 필요는 없습니다. 실제로 쓴 만큼만 파일 크기를 차지하고, 1TB는 할당 가능한 최대치입니다.

2단계. .wslconfig로 메모리와 CPU 제한하기

  1. 파일 탐색기 주소창에 %UserProfile%을 입력해 사용자 폴더로 갑니다. 경로는 C:\Users\사용자이름 형태입니다.
  2. 이 폴더에 .wslconfig 파일을 만듭니다. 기본으로는 존재하지 않으므로 직접 생성해야 합니다.
  3. 메모장으로 열어 아래처럼 적고 저장합니다.

[wsl2]
memory=4GB
processors=2
swap=2GB

값 단위는 GB 또는 MB를 붙여 씁니다. 단위를 생략하면 바이트로 해석됩니다. 스왑을 아예 쓰지 않으려면 swap=0으로 둡니다.

참고로 마이크로소프트는 파일을 직접 편집하는 대신 시작 메뉴의 WSL 설정 앱에서 바꾸는 방식을 권장하고 있습니다.

3단계. 캐시 메모리 회수와 디스크 설정

같은 파일 아래쪽에 실험 기능 구역을 추가할 수 있습니다.

[experimental]
autoMemoryReclaim=gradual
sparseVhd=true

  • autoMemoryReclaim은 기본값이 dropCache로 캐시를 즉시 회수하고, gradual은 천천히 회수합니다. disabled로 끌 수도 있습니다.
  • sparseVhd는 새로 만들어지는 VHD에만 적용됩니다. 이미 쓰고 있는 배포판의 ext4.vhdx가 자동으로 줄어들지는 않습니다.
  • 디스크 상한 자체를 낮추려면 [wsl2] 구역에 defaultVhdSize를 지정합니다. 기본값은 1TB입니다.

4단계. 적용하기

  1. PowerShell에서 wsl --shutdown을 실행합니다.
  2. 공식 문서가 말하는 8초 규칙대로, 배포판 창을 모두 닫은 뒤 약 8초를 기다려야 서브시스템이 완전히 멈춥니다.
  3. wsl --list --running으로 실행 중인 배포판이 없는지 확인한 뒤 다시 실행합니다.

주의사항

  • AppData 폴더 안의 WSL 관련 파일을 윈도우 도구로 옮기거나 편집하면 배포판이 손상될 수 있습니다. 리눅스 파일에 접근할 때는 \\wsl$\배포판이름\ 경로를 쓰세요.
  • 공식 디스크 문서에는 VHD를 확장하는 방법만 있습니다. 축소는 문서에서 "훨씬 더 복잡하다"고만 언급하고 절차를 제공하지 않으므로, 커뮤니티에서 도는 diskpart compact 방식은 비공식이며 백업 없이 시도하지 않는 편이 안전합니다.
  • wsl --shutdown은 실행 중인 모든 배포판을 내립니다. Docker Desktop을 쓰고 있다면 컨테이너도 함께 멈춥니다.

그래도 해결되지 않을 때

  1. 배포판 실행 시 "An error occurred mounting the distribution disk, it was mounted read-only as a fallback" 메시지가 뜨면 파일 시스템 오류입니다. wsl.exe --mount 경로 --vhd --bare로 붙인 뒤 wsl.exe sudo e2fsck -f /dev/장치명으로 복구하고 wsl.exe --unmount로 분리합니다.
  2. ext4.vhdx 실제 경로는 PowerShell에서 레지스트리를 조회해 얻습니다. 결과는 %LOCALAPPDATA%\Packages\패키지이름\LocalState\ext4.vhdx 형태입니다.
  3. 용량이 정말 부족하면 축소가 아니라 wsl --manage 배포판이름 --resize 크기로 확장하는 쪽이 공식 절차입니다. WSL 2.5 이상에서만 동작합니다.

자주 묻는 질문

Q1. 우분투 안에서 파일을 지웠는데 왜 C드라이브가 안 줄어드나요?
ext4.vhdx는 필요할 때 커지지만 자동으로 작아지지 않는 구조라서 그렇습니다. 파일 삭제는 VHD 내부 여유 공간만 늘립니다.

Q2. memory 값을 너무 낮게 잡으면 어떻게 되나요?
빌드나 컨테이너 실행 중 메모리 부족으로 프로세스가 강제 종료될 수 있습니다. 램이 16GB라면 4GB에서 8GB 사이로 시작해 보고 조정하세요.

Q3. .wslconfig를 만들었는데 아무 변화가 없습니다.
파일 이름이 .wslconfig.txt로 저장된 경우가 가장 흔합니다. 그리고 wsl --shutdown 없이 창만 닫으면 반영되지 않습니다.

같이 보면 좋은 글

공식 출처

댓글