Docker Desktop vmmem 메모리 폭주 해결법 (.wslconfig)

 

작업 관리자 메모리 점유율 99%, 주범은 vmmem? 도커(Docker)만 켜면 컴퓨터가 비행기 이륙 소리를 내며 버벅거리시나요? WSL2의 메모리 폭주를 막는 `.wslconfig` 리소스 제한 방법과 도커 데스크톱 최적화 세팅으로 쾌적한 개발 환경을 되찾는 법을 알려드립니다!

 

코딩이나 서버 개발을 하시다 보면 이제 도커(Docker Desktop)는 떼려야 뗄 수 없는 필수 프로그램이 되었습니다. 그런데 도커를 켜두고 웹 브라우저 탭 몇 개, IDE(VS Code나 IntelliJ)까지 띄우면 갑자기 마우스가 뚝뚝 끊기고 컴퓨터가 비명을 지르기 시작한 경험, 다들 한 번쯤 있으실 거예요. 그럴 때 `Ctrl + Shift + Esc`를 눌러 작업 관리자를 켜보면, 십중팔구 `vmmem`이라는 정체불명의 프로세스가 내 소중한 램(RAM)을 8GB, 10GB씩 무자비하게 집어삼키고 있는 것을 목격하게 됩니다. 진짜 완전 짜증 나죠. 😡

"나는 무거운 컨테이너를 돌린 적도 없는데 대체 왜 이러는 걸까?" 고민하셨다면 오늘 정말 잘 찾아오셨습니다. 이 현상은 도커 자체가 무겁다기보다는, 도커가 윈도우에서 돌아가기 위해 사용하는 WSL2 (Windows Subsystem for Linux 2)의 기본 메모리 정책 때문이거든요. 오늘 제가 알려드리는 `.wslconfig` 설정 파일 세팅과 도커 최적화 팁만 그대로 따라 하시면, 메모리 점유율을 딱 절반으로 줄이고 쾌적한 PC 환경을 되찾으실 수 있을 거예요! 😊

 

정교한 컴퓨터 메인보드와 빛나는 RAM 스틱이 묘사된 고해상도 3D 아이소메트릭 일러스트레이션입니다. 메인보드 중앙 위에는 홀로그램으로 표현된 투명하고 미래지향적인 방패가 `.wslconfig`라는 명확한 텍스트 라벨과 함께 있습니다. 이 방패는 모든 데이터 리소스를 삼키려는 듯 메인보드를 향해 공격적으로 돌진하는 거대한 파란색 데이터 고래(도커 고래)를 성공적으로 가로막고 있습니다. 메인보드 위로 흐르는 데이터 스트림과 RAM 스틱은 부드러운 청록색 네온 조명으로 빛나며, 전체적으로 전문적이고 기술적인 분위기의 파란색과 밝은 회색 색상 팔레트가 사용되었습니다.

1. 도대체 vmmem이 뭐길래 내 램을 다 먹는 걸까? 🤔

해결책을 알아보기 전에, 우리의 적(?)인 `vmmem`의 정체부터 파악해 봅시다. `vmmem`은 가상 머신(Virtual Machine)의 메모리를 관리하는 윈도우 시스템 프로세스입니다. 윈도우용 도커 데스크톱은 리눅스 환경을 구축하기 위해 WSL2를 백그라운드에서 실행하는데, 이 WSL2가 사용하는 자원이 전부 `vmmem`이라는 이름으로 뭉뚱그려져서 표시되는 거예요.

문제는 WSL2의 기본 설정이 "호스트(내 PC) 메모리의 최대 50% 또는 8GB 중 더 큰 값"을 마음대로 가져다 쓸 수 있도록 풀려있다는 점입니다. 램이 16GB인 컴퓨터라면 가만히 있어도 도커가 8GB를 꿀꺽해 버릴 수 있다는 뜻이죠. 게다가 리눅스는 메모리 캐싱을 적극적으로 하는 특성이 있어서, 컨테이너를 끄더라도 확보된 메모리를 윈도우에 즉시 반환하지 않고 계속 쥐고 있는 얌체 같은 짓을 한답니다.

💡 요약하자면!
`vmmem` 메모리 폭주의 원인은 도커가 사용하는 WSL2에 '사용량 상한선'이 제대로 설정되어 있지 않아서 생기는 현상입니다. 목줄을 채워주지 않으면 끝없이 덩치를 키우는 강아지 같다고 생각하시면 돼요.

 

2. 해결책 1단계: 마법의 .wslconfig 파일 만들기 🛠️

가장 확실하고 강력한 해결 방법입니다. 윈도우 시스템 폴더에 .wslconfig라는 텍스트 파일을 만들어서 "너는 RAM을 4GB까지만 써!"라고 명시적으로 명령을 내리는 것이죠. 컴퓨터를 잘 모르는 분들도 천천히 따라 하실 수 있게 스텝바이스텝으로 알려드릴게요.

📝 .wslconfig 설정 4단계

  1. 키보드에서 Windows 키 + R을 눌러 '실행' 창을 띄웁니다.
  2. %USERPROFILE% 이라고 입력하고 엔터를 칩니다. (그러면 C:\Users\본인사용자명 폴더가 열립니다.)
  3. 해당 폴더 빈 공간에 마우스 우클릭 > 새로 만들기 > 텍스트 문서를 클릭합니다.
  4. 파일 이름을 .wslconfig 로 변경합니다. (뒤에 .txt 확장자가 남지 않도록 주의하세요! 경고창이 뜨면 '예'를 누릅니다.)

이제 만들어진 .wslconfig 파일을 메모장으로 열고, 아래의 코드를 그대로 복사해서 붙여넣습니다.

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

이게 무슨 뜻이냐고요? WSL2가 사용할 수 있는 최대 메모리를 4GB로 제한하고, CPU 코어는 2개만 쓰도록 하며, 하드디스크를 메모리처럼 쓰는 스왑(swap) 영역은 사용하지 않겠다(0)는 뜻입니다. (스왑을 켜두면 디스크 I/O가 발생해 컴퓨터가 엄청나게 느려질 수 있어요.)

⚠️ 주의하세요! (재시작 필수)
파일을 저장했다고 끝이 아닙니다! 변경된 설정을 적용하려면 WSL을 재시작해야 합니다. 명령 프롬프트(cmd)나 파워쉘을 열고 wsl --shutdown 을 입력한 뒤, 도커 데스크톱을 재실행해 주세요.

 

3. 내 컴퓨터에 맞는 최적의 메모리 제한량 찾기 🧮

"저는 램이 32GB인데 4GB로 제한해도 될까요?", "저는 램이 8GB밖에 없는데 어떻게 하죠?" 이런 고민이 드실 수 있습니다. 무조건 4GB로 맞출 필요는 없습니다. 본인의 PC 사양과 띄울 도커 컨테이너의 무거운 정도에 따라 유동적으로 조절하는 것이 가장 베스트입니다.

아래 계산기에 여러분의 PC 전체 램 용량을 입력해 보세요. 제가 최적의 memory 제한값을 추천해 드릴게요!

🔢 WSL2 메모리 제한 처방 계산기

GB

 

4. 해결책 2단계: 도커 데스크톱 내부 설정 최적화 ⚙️

.wslconfig로 목줄을 채웠다면, 이제 도커 데스크톱 내부의 설정을 건드려 잔여 메모리 누수를 막아줄 차례입니다. 최신 도커 데스크톱에는 메모리 관리를 도와주는 똑똑한 기능들이 숨어있습니다.

  • Resource Saver 모드 켜기: 도커 우측 상단 톱니바퀴(Settings) > Resources 탭으로 이동하세요. Resource Saver라는 옵션이 보이면 체크해 줍니다. 이 기능은 지정된 시간 동안 컨테이너 활동이 없으면 도커가 스스로 절전 모드로 들어가 리소스를 반환하는 아주 유용한 기능입니다.
  • 주기적인 리소스 정리 (Prune): 도커는 쓰지 않는 이미지나 멈춘 컨테이너, 빌드 캐시 등을 계속 쌓아두는 경향이 있습니다. 터미널을 열고 가끔 한 번씩 docker system prune -a 명령어를 쳐주세요. 놀라울 정도로 많은 디스크 용량과 메모리가 확보되는 것을 볼 수 있습니다.

저는 이 두 가지 세팅을 적용하고 나서부터는 노트북 팬 돌아가는 소리가 거의 들리지 않게 되었답니다! 확실히 쾌적해져요.

핵심 요약 📝

🚀

Docker vmmem 메모리 폭주 해결 카드

1. 원인 파악: 도커가 사용하는 WSL2 가상 머신의 기본 정책이 램을 최대 50%까지 집어삼키기 때문입니다.
2. .wslconfig 파일 생성: C:\Users\본인계정 폴더에 파일을 만들고 아래 내용을 입력해 리소스를 제한합니다.
[wsl2]
memory=4GB
swap=0
3. 필수 재시작: 터미널에 wsl --shutdown을 입력하여 설정을 적용합니다.
4. 추가 최적화: 도커 세팅에서 Resource Saver를 켜고, 가끔씩 docker system prune으로 쓰레기를 청소해 주세요.

 

자주 묻는 질문 ❓

Q: .wslconfig 파일을 만들었는데 메모리 점유율이 똑같아요.
A: 파일 확장자가 `.txt`로 숨겨져 있을 확률이 99%입니다! 윈도우 탐색기 상단의 '보기' 메뉴에서 '파일 확장명'을 체크하신 뒤, 파일 이름이 `.wslconfig.txt`가 아닌 정확히 `.wslconfig` 인지 다시 한번 확인해 보세요. 수정 후 `wsl --shutdown` 도 잊지 마시고요!
Q: 메모리를 제한했더니 도커에서 빌드할 때 OOM(Out Of Memory) 에러가 나요.
A: Java(Spring)나 무거운 Node.js 프로젝트를 빌드할 때는 순간적으로 많은 메모리가 필요합니다. 이때는 `memory` 값을 6GB나 8GB로 조금 올려주시거나, `swap=2GB` 처럼 스왑 메모리를 약간 열어두어 시스템이 뻗는 것을 방지해 주시면 해결됩니다.
Q: 도커를 완전히 종료했는데도 vmmem이 안 꺼져요!
A: 도커 앱을 끄더라도 백그라운드의 WSL2 리눅스 커널은 계속 돌아가고 있기 때문입니다. 가장 깔끔한 방법은 파워쉘이나 CMD를 열고 `wsl --shutdown` 명령어를 한 번 쳐주는 것입니다. 그러면 vmmem 프로세스가 즉시 사라지고 메모리가 싹 반환됩니다.

단순히 파일 하나 만들고 수치만 적어줬을 뿐인데, 제 PC는 체감상 2배는 쾌적해진 것 같아요! 여러분도 도커 메모리 누수 스트레스에서 꼭 해방되시길 바랍니다. 설정하시다가 막히는 부분이나 다른 도커 최적화 꿀팁이 궁금하시다면 언제든 댓글로 물어봐주세요~ 즐거운 코딩 되세요! 😊