Vmmem 메모리 이슈 해결하기 in WSL2

WSL2 환경에서 도커(Docker)를 실행하다 보면 작업관리자 창의 메모리 부분이 느낌이 쎄할 때가 있다.

확인해보면 매번 다음과 같다.

저게 놀랍게도 아무것도 실행하지않은 아이들(idle) 상태이다.

WSL 깃헙 이슈에 있나 검색해보니 놀랍게도 2019년부터 아직까지 오픈되어있는 이슈이다.

 

WSL 2 consumes massive amounts of RAM and doesn't return it · Issue #4166 · microsoft/WSL

Your Windows build number: 18917 What's wrong / what should be happening instead: WSL 2 starts using huge amounts of RAM after a while, just using it like normal. At the moment I'm using ph...

github.com

안에 들어가서 보면, 내 상황은 양반이구나. 라는 말이 절로 나온다. 

메모리가 적건 많건 평등하게 최대 80%를 먹는다.

문제의 원인?

  • 리눅스에서 파일 액세스할 때, 리눅스 OS는 그 정보를 캐시로 사용하기 위해 메모리에 보존한다.
    메모리가 부족해 더 이상 보존할 수 없을 때까지 반복된다.
  • WSL2는 Linux의 메모리 사용량에 따라 사용 메모리 크기를 동적으로 증감한다.

이러한 악순환이 반복하여 최대 설정인 메모리의 80% 까지 메모리가 반환되는 일 없이 Vmmem이 먹는 것이다.

문제 해결책

이 문제에 대한 해결책은 2 가지로 나뉜다.

  1. Hyper-V를 사용하여 가상화 머신을 돌린다.
  2. .wslconfig 파일을 생성하고, 메모리 점유 최대치를 설정하여 Vmmem이 메모리 누수가 나는 것을 막는다.

1번 해결책은 Windows10 Pro를 사용하면 해결되는 문제지만, 가격이 만만찮다. 32만4천600원

2번 해결책이 현실적인데 다음과 같다.

  1. 사용자 경로로 이동한다. ( C:\Users\유저이름 )
  2. .wslconfig 파일을 생성하고, 설정한다. 
[wsl2] memory=6GB swap=0 localhostForwarding=true