WSL을 이용한 Windows에 리눅스 및 도커 설치하기 (6) - WSL 2에서 Docker 사용시 메모리 과다 점유하는 이슈 트러블 슈팅

Ryu Raccoon·2024년 3월 11일
1

WSL

목록 보기
6/6
post-thumbnail

** 해당 포스팅은 작성된 순서에 따라 읽는 것을 권장한다. 따라서 첫 번째 순서의 포스팅을 읽지 않으신 분들은 그것부터 먼저 읽고 오시는 것을 추천한다!

** 포스팅의 전체 순서는 아래와 같다.

  1. Windows OS에서 리눅스 사용하기 - WSL 설치
  2. Windows OS에서 리눅스 사용하기 - CentOS 7 설치
  3. Docker 설치
  4. Docker에 Oracle 이미지 설치 및 컨테이너 생성
  5. 설치한 Oracle과 DBMS Tool(DBeaver)을 연결
  6. WSL 2에서 Docker 사용시 메모리 과다 점유하는 이슈 트러블 슈팅

아주 평화롭게 Docker에 DB를 올려서 테스트하는 날들이었다. 하지만 어느 날 평소처럼 도커를 구동한 상태에서 개발하는 도중, 컴퓨터가 느려짐을 느꼈고, 이를 해결하기 위해 실행한 작업 관리자 창에서 보지 말아야 할 것(?)을 봐버렸다.

그것이 정확히 무엇이냐 하면, WSL2에서 도커 사용 시 Vmmem 프로세스가 실행되고, 아래 사진과 같이 해당 프로세스에 상당히 많은 메모리가 할당된다는 문제였다.

참고로 해당 문제는 MS 측에서도 파악하고 있는 것으로 보이며, 마땅히 뚜렷한 해결방법은 없는 것으로 보인다. 이슈에 대한 자세한 내용은 https://github.com/microsoft/WSL/issues/4166 링크에서 확인할 수 있다.

물론 뚜렷한 해결 방법은 없지만, 구글링을 통해 WSL2 메모리 할당 제한이라는 임시방편을 발견했다! 바로 이어질 아래에서는 해당 방법을 어떻게 수행하는지 상세하게 작성해보겠다.

1. WSL2 메모리 할당 제한

이 방법은 WSL2 내의 컨테이너에 할당되는 메모리를 제한한다. 쉽게 표현해서, WSL2에 밥을 덜 주는(...) 방법이라고 생각하면 된다.

먼저 사용자 디렉터리 밑에 .wslconfig 파일을 하나 만들고, 아래의 내용을 작성한다.

[wsl2]
memory=4GB[제한하려는 메모리 크기. 여기서는 4GB로 작성하겠다]
swap=0

** memory 설정은 사용하는 컴퓨터 메모리의 총량/여유분을 확인하고 설정하면 된다.

** swap은 memory 수요가 초과할 때 사용되는 가상 메모리 공간인데, 활성화 시 Disk I/O로 인한 지연이 발생할 수 있어서 비활성화 처리했다. (물론 그 정도로 WSL을 사용하진 않겠지만..)

이제 메모리 할당을 제한했으므로, 실제로 적용이 되었는지를 확인해보자.
< 제한 전 >

< 제한 후 >

< 제한 후 컨테이너 실행 >

Total 메모리가 15GB에서 3.8G로 크게 감소된 것이 보인다. 그리고 Vmmem 프로세스 또한 상술한 7.6GB에서 4.1GB로 감소된 것을 확인할 수 있다. 비록 이 방법은 임시방편이지만, WSL2가 사용할 수 있는 메모리 자체를 줄인다는 점에서 가장 확실한 방법이라고 할 수 있다.

2. 마치며

이미 해당 이슈에 대해 다루신 많은 선배님들이 있었고, 나보다도 더 유려한 해결을 하셨으나, 나만의 매뉴얼을 만든다고 생각하며 포스팅하였다. 참고한 포스팅 중에 정말로 포함해보고픈 내용 또한 있었으나, 내가 이해하지 못하고 따라하기만 하면 의미가 없다고 생각하여 다루지 않았다. 해당 방법은 아래 레퍼런스에 별도로 추가해놓았으니 참고하시면 될 것 같다. 이상 설치부터 트러블 슈팅까지 WSL2에서 Docker를 다루는 포스팅은 정말로 마쳐보도록 하겠다!!

profile
인프라에 관심있는 백엔드 개발자

0개의 댓글