WSL2가 램을 다 먹을 때 — Vmmem 잡는 법
윈도우에서 개발하다 보면 작업 관리자에서 이걸 보게 됩니다.
Vmmem 9.2GB
"이게 뭔데 램을 이렇게 먹지?"
프로그램을 켠 기억도 없는데 램의 절반이 사라져 있습니다. 바이러스도 아니고 정상 동작입니다. 다만 기본값이 좀 과합니다.
결론부터
| Vmmem이 뭔가 | WSL2(윈도우 안의 리눅스)가 쓰는 램입니다 |
| 왜 이렇게 큰가 | 기본값이 전체 램의 50% 또는 8GB 중 작은 값 |
| 줄일 수 있나 | 됩니다. .wslconfig 파일 하나 만들면 됩니다 |
| 얼마로 잡나 | 램 16GB면 4~6GB, 32GB면 8~12GB |
| 껐다 켜야 하나 | 네. wsl --shutdown 한 번 |
1. Vmmem이 뭔가
WSL2는 윈도우 안에서 진짜 리눅스를 돌립니다. 예전 방식처럼 흉내만 내는 게 아니라, 가벼운 가상 환경 안에서 리눅스 커널이 실제로 돌아갑니다.
Vmmem은 그 가상 환경이 쓰는 램을 윈도우가 한 덩어리로 묶어 보여주는 것입니다.
작업 관리자에 보이는 Vmmem
= WSL2 리눅스 + 그 안에서 도는 것 전부
= 도커를 쓴다면 컨테이너들도 여기 포함
도커 데스크톱을 쓰신다면 도커도 이 안에 들어 있습니다. 그래서 도커를 안 켠 것 같은데도 램이 잡혀 있는 겁니다.
2. 왜 이렇게 많이 잡나
기본값이 "전체 램의 50% 또는 8GB 중 작은 값"이기 때문입니다.
| 내 램 | WSL2가 쓸 수 있는 상한 |
|---|---|
| 8GB | 4GB |
| 16GB | 8GB ← 절반입니다 |
| 32GB | 8GB |
| 64GB | 8GB |
16GB에서 8GB면 절반이 통째로 넘어갑니다. 윈도우 자체가 4~6GB를 쓰니까, 브라우저와 IDE가 나눠 쓸 게 거의 안 남습니다.
이 기본값은 윈도우 빌드에 따라 다릅니다. 오래된 빌드는 80%까지 잡았습니다. 내 환경에서 실제로 얼마인지는 아래 방법으로 확인하는 게 정확합니다.
그리고 잡은 램을 잘 안 놓습니다
리눅스는 남는 램을 캐시로 씁니다. "안 쓰면 아까우니 미리 채워두는" 방식이라 그 자체는 합리적입니다.
문제는 윈도우 입장에서는 그게 그냥 쓰이고 있는 램으로 보인다는 것입니다. 그래서 작업이 끝나도 Vmmem 숫자가 안 내려갑니다.
3. 해결 — .wslconfig 하나 만들면 됩니다
파일 하나 만들고 재시작하면 끝입니다.
1단계 — 파일 만들기
C:\Users\사용자명\.wslconfig 위치에 만듭니다.
(파일 이름이 .으로 시작합니다. 확장자는 없습니다.)
가장 쉬운 방법은 메모장을 열고 아래 내용을 붙여넣은 뒤,
파일 형식을 "모든 파일"로 바꾸고 .wslconfig 라는 이름으로 저장하는 것입니다.
[wsl2]
memory=6GB
processors=4
swap=2GB
2단계 — 값 정하기
| 내 램 | memory 권장 |
|---|---|
| 16GB | 4~6GB |
| 32GB | 8~12GB |
| 64GB | 16GB~ |
너무 적게 잡으면 안 됩니다. 컨테이너가 상한을 넘기면 강제 종료됩니다. 데이터베이스를 여러 개 띄우신다면 컨테이너별 사용량을 먼저 보고 정하세요.
각 항목은 이렇습니다.
memory— 상한입니다. 이만큼 항상 쓰는 게 아니라 여기까지만 쓴다는 뜻입니다processors— 쓸 CPU 코어 수. 보통 건드릴 필요 없습니다swap— 램이 모자랄 때 쓸 디스크 공간.0으로 끄면 상한을 넘길 때 바로 죽습니다
3단계 — 재시작
PowerShell이나 명령 프롬프트에서:
wsl --shutdown
그다음 WSL이나 도커를 다시 켜면 적용됩니다.
⚠️
wsl --shutdown은 돌고 있는 걸 전부 끕니다. 도커 컨테이너도 같이 내려가니, 작업 중이면 저장하고 실행하세요.
4단계 — 확인
WSL 안에서:
free -h
total 값이 방금 정한 숫자로 나오면 적용된 것입니다.
4. 그래도 램이 부족하다면
.wslconfig는 나눠 쓰는 비율을 조절하는 것이지 램을 늘려주지는 않습니다.
16GB 에서 WSL2 를 6GB 로 제한
→ 윈도우 쪽이 10GB 로 늘어남
→ 대신 컨테이너를 많이 못 띄움
이쪽을 줄이면 저쪽이 늘어나는 관계입니다. 둘 다 부족하면 그건 조절로 해결이 안 됩니다.
그때 판단 기준은 램 16GB vs 32GB에 있습니다. 작업 관리자에서 "커밋된 메모리"가 물리 램보다 크면 이미 디스크로 넘어가고 있다는 뜻입니다.
⚠️ 2026년 들어 램 값이 크게 올랐습니다. 늘리기 전에 지금 사야 하는지 먼저 보시는 걸 권합니다.
.wslconfig로 해결되는 상황이면 그게 훨씬 쌉니다.
5. 램 말고 디스크도 봐야 합니다
WSL2는 리눅스 파일을 가상 디스크 파일 하나에 담아둡니다. 그리고 이 파일은 커지기만 하고 저절로 줄어들지 않습니다.
리눅스 안에서 파일을 지워도 윈도우 쪽 용량은 그대로입니다.
용량이 신경 쓰이면 도커 쪽부터 정리하는 게 효과가 큽니다.
docker system df # 얼마나 쓰는지
docker system prune # 안 쓰는 것 정리
SSD 용량 기준은 개발용 SSD 고르기에 있습니다.
자주 묻는 질문
Vmmem을 그냥 강제 종료하면 안 되나요
작업 관리자에서 끄면 WSL과 도커가 통째로 내려갑니다. 저장 안 한 작업은 날아갑니다.
정상적인 방법은 wsl --shutdown 입니다.
.wslconfig 를 만들었는데 적용이 안 됩니다
세 가지를 확인하세요.
- 위치가
C:\Users\사용자명\.wslconfig가 맞는지 (다른 폴더면 안 읽습니다) - 파일 이름이
.wslconfig.txt로 저장되지 않았는지 (메모장이 자주 그럽니다) wsl --shutdown을 했는지
WSL 안에서 free -h 를 보면 이미 꽉 차 있는데요
리눅스는 남는 램을 캐시로 채워둡니다. available 값을 보세요.
그게 넉넉하면 실제로는 여유가 있는 것입니다.
도커 데스크톱에도 메모리 설정이 있던데요
윈도우에서 도커가 WSL2 위에서 돌 때는 .wslconfig 쪽이 상위 설정입니다.
여기서 정한 상한을 도커가 넘을 수 없습니다.
processors 는 얼마로 하나요
기본값(전체 코어)으로 두셔도 대개 문제없습니다. 빌드 중에 윈도우가 버벅이면 그때 한두 개 줄여보세요.
로컬 LLM에 영향이 있나요
GPU로 돌린다면 없습니다. 로컬 LLM은 VRAM을 쓰고, WSL2는 시스템 램을 씁니다. 다만 CPU로 돌린다면 같은 램을 나눠 쓰게 되니 영향이 있습니다.
정리
Vmmem은 WSL2가 쓰는 램입니다. 도커를 쓰면 컨테이너도 여기 포함입니다- 기본 상한이 전체 램의 50% 또는 8GB 중 작은 값입니다. 16GB에선 절반입니다
.wslconfig파일 하나로 제한됩니다. 만들고wsl --shutdown- 램 16GB면 4~6GB로 잡으세요. 너무 적으면 컨테이너가 죽습니다
- 나눠 쓰는 비율을 바꾸는 것이지 램이 늘어나는 건 아닙니다
- 가상 디스크는 커지기만 합니다. 가끔 정리하세요
설정이 실제와 다르게 동작하면 알려주세요. 확인 후 갱신합니다.