yongckim/WSL2 메모리 점유 문제

Created Fri, 19 Nov 2021 11:24:11 +0900 Modified Sat, 20 Nov 2021 20:52:04 +0900
885 Words

깃허브 블로그 글을 작성하던중…

갑자기 컴퓨터가 끊기는 느낌이 들어서 메모리를 확인해보니 vmmem이라는 프로세스가 혼자서 8기가를 점유하고 있었습니다.

vmmem?

무슨 프로세스인지 몰라서 인터넷에 검색해보니 hyper-v, virtualbox라는 가상 머신 플랫폼으로 도커를 사용할 때 필요한 프로세스인 것 같습니다.

vmmem은 왜 이렇게 메모리를 많이 먹는가?

리눅스에서 파일을 액세스할 때, 리눅스 OS는 해당 데이터를 캐시로 사용하기 위해서 메모리에 보존하게 됩니다.

이 과정은 메모리가 부족해서 더 이상 보존할 수 없을 때 까지 반복됩니다.

WSL2는 Linux의 메모리 사용량에 따라 사용 메모리 크기를 동적으로 증가/감소 시킵니다.

즉 오래하게 사용하게 되면서 파일을 여러번 열게 되면 WSL2가 계속해서 메모리를 동적할당을 해서 메모리를 할당하게 되고 엄청나게 높은 메모리를 점유하게 되는 것입니다.

github issue에 해당 문제가 등록되어 있습니다.

https://github.com/microsoft/WSL/issues/4166

해당 issue를 보면 현재 빌드 20175에서 기본 메모리 할당을 호스트 메모리의 50% 또는 8GB로 조정하도록 하여 계속해서 할당하는 것을 방지한 것 같습니다. (이 패치 이전에는 80%를 사용했다고 합니다.)

https://docs.microsoft.com/en-us/windows/wsl/release-notes#build-20175

메모리를 할당하는 것을 줄일 수는 없을까?

https://github.com/microsoft/WSL/issues/4166

위의 이슈를 보면 메모리 사용을 줄이기 위해 2가지 방법을 사용하는 것 같습니다.

WSL2 재시작

powershell에서 다음 명령을 사용하여 WSL2를 종료하면 점유하고 있던 메모리를 다시 줄일 수 있습니다.

wsl --shutdown

다시 시작하려면 터미널을 다시 실행시키거나 docker desktop을 사용중일 경우 restart 시킬지 물어보기 때문에 restart를 눌러서 시작하면 됩니다.

.wslconfig 파일 사용하기

wsl2에서 메모리를 많이 할당할때마다 재시작을 하면 끝도 없이 재시작하게 될 것입니다.

그래서 wsl이 할당할 수 있는 메모리양을 .wslconfig 파일을 이용해서 지정할 수 있습니다.

  1. win + r 키를 입력하여 실행창을 킨후 %userprofile%을 입력하고 실행하면 사용자의 홈 디렉터리가 나옵니다.

  2. 해당 디렉터리에 .wslconfig 파일을 만듭니다.

  3. .wslconfig 파일을 다음과 같이 작성합니다.

[wsl2]
memory = 6GB
swap=0

위의 내용에서 메모리 부분을 자기가 설정하고 싶은 메모리로 지정하면 됩니다.

너무 작은 메모리를 줄 경우 wsl이 계속해서 뻗을 수 있으므로 자신에게 맞는 값을 잘 확인해야 합니다.