Docker Desktop vmmem 메모리 폭주 해결법 (.wslconfig)
코딩이나 서버 개발을 하시다 보면 이제 도커(Docker Desktop)는 떼려야 뗄 수 없는 필수 프로그램이 되었습니다. 그런데 도커를 켜두고 웹 브라우저 탭 몇 개, IDE(VS Code나 IntelliJ)까지 띄우면 갑자기 마우스가 뚝뚝 끊기고 컴퓨터가 비명을 지르기 시작한 경험, 다들 한 번쯤 있으실 거예요. 그럴 때 `Ctrl + Shift + Esc`를 눌러 작업 관리자를 켜보면, 십중팔구 `vmmem`이라는 정체불명의 프로세스가 내 소중한 램(RAM)을 8GB, 10GB씩 무자비하게 집어삼키고 있는 것을 목격하게 됩니다. 진짜 완전 짜증 나죠. 😡
"나는 무거운 컨테이너를 돌린 적도 없는데 대체 왜 이러는 걸까?" 고민하셨다면 오늘 정말 잘 찾아오셨습니다. 이 현상은 도커 자체가 무겁다기보다는, 도커가 윈도우에서 돌아가기 위해 사용하는 WSL2 (Windows Subsystem for Linux 2)의 기본 메모리 정책 때문이거든요. 오늘 제가 알려드리는 `.wslconfig` 설정 파일 세팅과 도커 최적화 팁만 그대로 따라 하시면, 메모리 점유율을 딱 절반으로 줄이고 쾌적한 PC 환경을 되찾으실 수 있을 거예요! 😊
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단계
- 키보드에서
Windows 키 + R을 눌러 '실행' 창을 띄웁니다. %USERPROFILE%이라고 입력하고 엔터를 칩니다. (그러면C:\Users\본인사용자명폴더가 열립니다.)- 해당 폴더 빈 공간에 마우스 우클릭 > 새로 만들기 > 텍스트 문서를 클릭합니다.
- 파일 이름을
.wslconfig로 변경합니다. (뒤에 .txt 확장자가 남지 않도록 주의하세요! 경고창이 뜨면 '예'를 누릅니다.)
이제 만들어진 .wslconfig 파일을 메모장으로 열고, 아래의 코드를 그대로 복사해서 붙여넣습니다.
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 메모리 제한 처방 계산기
4. 해결책 2단계: 도커 데스크톱 내부 설정 최적화 ⚙️
.wslconfig로 목줄을 채웠다면, 이제 도커 데스크톱 내부의 설정을 건드려 잔여 메모리 누수를 막아줄 차례입니다. 최신 도커 데스크톱에는 메모리 관리를 도와주는 똑똑한 기능들이 숨어있습니다.
- Resource Saver 모드 켜기: 도커 우측 상단 톱니바퀴(Settings) >
Resources탭으로 이동하세요.Resource Saver라는 옵션이 보이면 체크해 줍니다. 이 기능은 지정된 시간 동안 컨테이너 활동이 없으면 도커가 스스로 절전 모드로 들어가 리소스를 반환하는 아주 유용한 기능입니다. - 주기적인 리소스 정리 (Prune): 도커는 쓰지 않는 이미지나 멈춘 컨테이너, 빌드 캐시 등을 계속 쌓아두는 경향이 있습니다. 터미널을 열고 가끔 한 번씩
docker system prune -a명령어를 쳐주세요. 놀라울 정도로 많은 디스크 용량과 메모리가 확보되는 것을 볼 수 있습니다.
저는 이 두 가지 세팅을 적용하고 나서부터는 노트북 팬 돌아가는 소리가 거의 들리지 않게 되었답니다! 확실히 쾌적해져요.
핵심 요약 📝
Docker vmmem 메모리 폭주 해결 카드
C:\Users\본인계정 폴더에 파일을 만들고 아래 내용을 입력해 리소스를 제한합니다.
memory=4GB
swap=0
Resource Saver를 켜고, 가끔씩 docker system prune으로 쓰레기를 청소해 주세요.
자주 묻는 질문 ❓
단순히 파일 하나 만들고 수치만 적어줬을 뿐인데, 제 PC는 체감상 2배는 쾌적해진 것 같아요! 여러분도 도커 메모리 누수 스트레스에서 꼭 해방되시길 바랍니다. 설정하시다가 막히는 부분이나 다른 도커 최적화 꿀팁이 궁금하시다면 언제든 댓글로 물어봐주세요~ 즐거운 코딩 되세요! 😊