WSL2가 메모리를 쥐고 놓지 않으면 .wslconfig로 상한과 자동 반납을 건다
vmmemWSL이 몇 GB를 계속 차지하면 memory 상한과 autoMemoryReclaim=gradual을 설정하고 wsl --shutdown으로 적용합니다. 상한을 너무 낮추면 무거운 컨테이너가 OOM으로 죽습니다.
WSL2나 그 위의 Docker Desktop으로 빌드·시험을 돌린 뒤, 작업이 끝났는데도 작업 관리자의 vmmemWSL(옛 버전은 Vmmem)이 몇 GB를 계속 차지합니다. Windows 쪽 프로그램이 느려지고 메모리 압박이 오는데, 리눅스 안에서는 정작 쓰는 프로세스가 없습니다.
원인은 WSL2가 가상 머신이라는 데 있습니다. 리눅스 게스트는 한 번 받은 메모리를 파일 캐시 등으로 계속 쓰고, 그것을 Windows에 바로 돌려주지 않습니다. 따로 정하지 않으면 게스트가 가져갈 수 있는 최대치도 호스트 메모리의 절반 정도로 큽니다.
해법은 사용자 폴더(%UserProfile%)의 .wslconfig에 두 가지를 거는 것입니다. 하나는 게스트가 가져갈 수 있는 상한이고, 다른 하나는 게스트가 놀고 있을 때 캐시 메모리를 천천히 돌려주게 하는 자동 반납입니다.
[wsl2]
memory=8GB
[experimental]
autoMemoryReclaim=gradual
설정은 실행 중인 VM에는 적용되지 않습니다. PowerShell에서 wsl --shutdown으로 WSL을 완전히 내린 뒤 다시 켜고, Docker Desktop을 쓴다면 Docker Desktop도 다시 띄웁니다. 적용 뒤에는 무거운 작업을 한 번 돌리고 몇 분 기다려 vmmemWSL이 실제로 줄어드는지 확인합니다.
대가도 있습니다. 상한은 말 그대로 상한이라, 여러 워커로 E2E 시험을 돌리거나 큰 이미지를 빌드하는 등 무거운 컨테이너가 그 안에서 OOM으로 죽을 수 있습니다. 평소 가장 무거운 작업을 돌려 보고, 실패하면 상한을 조금씩 올리거나 그 작업의 워커 수를 줄이는 쪽으로 맞춥니다.