
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단계. 현재 상태부터 확인하기
- 시작 메뉴에서 PowerShell을 엽니다.
- wsl --version을 입력해 WSL 버전을 확인합니다. 이 명령을 인식하지 못하면 스토어 버전으로 업데이트가 필요합니다.
- wsl --list --verbose로 설치된 배포판 이름과 WSL 버전(1 또는 2)을 확인합니다. .wslconfig 설정은 WSL 2에만 적용됩니다.
- 디스크 사용량은 wsl.exe --system -d 배포판이름 df -h /mnt/wslg/distro로 봅니다. 이 명령이 안 되면 wsl df -h /를 씁니다.
여기서 Size 항목이 1T로 보여도 놀랄 필요는 없습니다. 실제로 쓴 만큼만 파일 크기를 차지하고, 1TB는 할당 가능한 최대치입니다.
2단계. .wslconfig로 메모리와 CPU 제한하기
- 파일 탐색기 주소창에 %UserProfile%을 입력해 사용자 폴더로 갑니다. 경로는 C:\Users\사용자이름 형태입니다.
- 이 폴더에 .wslconfig 파일을 만듭니다. 기본으로는 존재하지 않으므로 직접 생성해야 합니다.
- 메모장으로 열어 아래처럼 적고 저장합니다.
[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단계. 적용하기
- PowerShell에서 wsl --shutdown을 실행합니다.
- 공식 문서가 말하는 8초 규칙대로, 배포판 창을 모두 닫은 뒤 약 8초를 기다려야 서브시스템이 완전히 멈춥니다.
- wsl --list --running으로 실행 중인 배포판이 없는지 확인한 뒤 다시 실행합니다.
주의사항
- AppData 폴더 안의 WSL 관련 파일을 윈도우 도구로 옮기거나 편집하면 배포판이 손상될 수 있습니다. 리눅스 파일에 접근할 때는 \\wsl$\배포판이름\ 경로를 쓰세요.
- 공식 디스크 문서에는 VHD를 확장하는 방법만 있습니다. 축소는 문서에서 "훨씬 더 복잡하다"고만 언급하고 절차를 제공하지 않으므로, 커뮤니티에서 도는 diskpart compact 방식은 비공식이며 백업 없이 시도하지 않는 편이 안전합니다.
- wsl --shutdown은 실행 중인 모든 배포판을 내립니다. Docker Desktop을 쓰고 있다면 컨테이너도 함께 멈춥니다.
그래도 해결되지 않을 때
- 배포판 실행 시 "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로 분리합니다.
- ext4.vhdx 실제 경로는 PowerShell에서 레지스트리를 조회해 얻습니다. 결과는 %LOCALAPPDATA%\Packages\패키지이름\LocalState\ext4.vhdx 형태입니다.
- 용량이 정말 부족하면 축소가 아니라 wsl --manage 배포판이름 --resize 크기로 확장하는 쪽이 공식 절차입니다. WSL 2.5 이상에서만 동작합니다.
자주 묻는 질문
Q1. 우분투 안에서 파일을 지웠는데 왜 C드라이브가 안 줄어드나요?
ext4.vhdx는 필요할 때 커지지만 자동으로 작아지지 않는 구조라서 그렇습니다. 파일 삭제는 VHD 내부 여유 공간만 늘립니다.
Q2. memory 값을 너무 낮게 잡으면 어떻게 되나요?
빌드나 컨테이너 실행 중 메모리 부족으로 프로세스가 강제 종료될 수 있습니다. 램이 16GB라면 4GB에서 8GB 사이로 시작해 보고 조정하세요.
Q3. .wslconfig를 만들었는데 아무 변화가 없습니다.
파일 이름이 .wslconfig.txt로 저장된 경우가 가장 흔합니다. 그리고 wsl --shutdown 없이 창만 닫으면 반영되지 않습니다.
같이 보면 좋은 글
- Linux 디스크 용량 부족 해결: df·du·journalctl로 원인 찾고 정리하기
- Docker 포트 충돌 해결: port is already allocated 원인·Compose 점검
- IntelliJ 메모리 부족·느려짐 해결: IDE 힙과 빌드 힙, Gradle JVM 구분하기
공식 출처
'Linux' 카테고리의 다른 글
| 리눅스 자주 쓰는 명령어 정리 ② 프로세스·시스템 모니터링 필수 15개: ps·top·kill·systemctl·journalctl 사용법 (Ubuntu 24.04 기준) (0) | 2026.08.25 |
|---|---|
| 리눅스 자주 쓰는 명령어 정리 ① 파일·디렉터리 관리 필수 20개: ls·cd·cp·mv·rm·chmod 사용법 (Ubuntu 24.04 기준) (0) | 2026.08.25 |
| 윈도우 리눅스 듀얼부팅 시간 어긋남 해결: RTC·UTC 설정 통일 방법 (0) | 2026.08.16 |
| Linux 디스크 용량 부족 해결: df·du·journalctl로 원인 찾고 정리하기 (0) | 2026.08.03 |
| HP UX 네트워크 설정 참고 블로그 (0) | 2020.06.30 |
댓글