WSL2+Docker는 메모리를 절약할 수 있습니까
결론적으로 쓰기
.wslconfig
는 메모리 사용량을 억제할 수 있다.각종 시행 결과 메모리 사용률은 개선됐지만 기대에 미치지 못했다(99%=>89%~94% 사이에서 안정화).
2021/4/25 보충
.wslconfig
에서 누락[wsl2]
..wslconfig
에서는 [wsl2]
를 설정 파일의 맨 위에 기록할 필요가 있다.설정 파일을 정확하게 쓰고 wsl2를 다시 시작하면 PC의 메모리 사용률이 70% 안팎으로 떨어진다.
아래 영상을 보니
.wslconfig
의 작법에 오류가 있었다.이 영상은 wsl2를 사용할 때 곤란해지기 쉬운 다른 대책법도 설명해 참고할 수 있다.다음은 조사 방법과 대책 등을 적는다.
환경 정보
windowsキー
+ r
에서 winver 실행메모리 및 CPU
메모리 사용 확인
다음 몇 가지 점에서 메모리 사용 상황을 확인하세요.
작업 관리자가 Windows 전체 메모리 사용 확인
※ 사후 촬영입니다.초기 메모리 99%
당초 Vmmem의 임무는 4G~5G의 메모리만 갖고 있었다.Vmmem은 가상 환경에서 사용되는 메모리와 프로세서를 나타냅니다.가상 환경은 WSL2를 의미합니다.WSL2가 많은 메모리를 사용하고 있다는 사실을 알고 WSL2의 메모리 사용량에 제한이 있는지 조사했다.
WSL2에 사용되는 메모리 제한
WSL2와 관련해서는 쓰기
C:\Users\[username]\.wslconfig
를 통해 다양한 설정이 가능하다.메모리 사용량도 이 프로필을 통해 설정할 수 있습니다.※
.wslconfig
의 작성 방법 등 자세한 내용wsl 문서을 확인할 수 있습니다.공식 문서에 따르면 WSL2는 Windows에서 사용 가능한 메모리의 최대 80%를 사용한다고 적혀 있습니다.
50% of total memory on Windows or 8GB, whichever is less; on builds before 20175: 80% of your total memory on Windows
자신의 컴퓨터에 더 적은 메모리를 기록한다
.wslconfig
..wslconfig
[wsl2]
memory=1GB
이것은 WSL2에서 사용할 수 있는 최대 메모리 값을 설정하는 설명입니다..wslconfig
창설과 업데이트 후 wsl을 다시 시작하여 설정을 반영합니다.참조: wsl2 재부팅 방법
wsl을 다시 시작하고 작업 관리자를 보십시오. vmmem이 사용하는 메모리는 1020MB를 초과하지 않습니다.
WSL2의 Ubuntu 18.04 메모리 확인
WSL2의 메모리 할당을 제한한 뒤 실제 WSL에서 사용하는 메모리가 제한되는지 확인했다.
$ free -h
total used free shared buff/cache available
Mem: 978M 201M 68M 325M 708M 314M
Swap: 1.0G 75M 948M
네, total
6.1G, free
2.8G입니다.무엇보다 used
wsl2 설정으로 제한된 1G의 1.5G를 초과했습니다.※ ↑의free 지령 내용이 업데이트되었습니다.wslconfig를 정확하게 쓰면 메모리의 사용량이 억제되었는지 확인할 수 있습니다.wslconfig에서 [wsl2]를 설정 파일의 맨 위에 기록해야 합니다.
Docker/docker-compose 사용 가능한 메모리 제한
Docker는 기본적으로 메모리를 무제한으로 사용합니다.
By default, a container has no resource constraints and can use as much of a given resource as the host’s kernel scheduler allows
참조 소스: https://docs.docker.com/config/containers/resource_constraints/#memory
WSL2는 Docker Desktop을 사용하여 Docker를 이동하기 때문에 Docker Desktop의 설정이 메모리 사용량을 제한할 수 있는지 조사했다.Docker Desktop의 기능으로서 메모리를 제한하는 기능은 없고 WSL2로만 메모리 사용량을 제한할 수 있습니다.
The Advanced tab is only available in Hyper-V mode, because in WSL 2 mode and Windows container mode these resources are managed by Windows. In WSL 2 mode, you can configure limits on the memory, CPU, and swap size allocated to the WSL 2 utility VM.
참조 소스: https://docs.docker.com/docker-for-windows/
찾아보니 docker-compose에서 시작하는 용기에 사용할 메모리를 제한하는 설정이 있어서 잠시 넣었습니다.
mem_limit
의 설정.아래와 같이 rails를 이동하는 용기와 이동하는db를 이동하는 용기의 메모리 상한선은 각각 500MB로 설정되어 있다.docker-compose.yml
version: "2.4"
services:
db:
image: postgres
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: hogehoge
mem_limit: 500m
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
mem_limit: 500m
주의점은 버젼2 시스템만 사용할 수 있는 설정mem_limit
이다.이제 docker-compose up을 시작하여 메모리를 확인합니다.$ docker stats junyablog_db_1 junyablog_web_1
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
7bc5211e9318 blog_db_1 0.00% 20.05MiB / 500MiB 4.01% 5.49kB / 12kB 0B / 0B 7
73285e90db42 blog_web_1 0.02% 101.9MiB / 500MiB 20.37% 146kB / 726kB 0B / 0B 20
컨테이너 레벨에서 메모리의 상한선이 설정되었습니다.궁극
.wslconfig
에 기재된 설정을 통해 제한할 수 있다.wslconfig
에서 WSL2가 사용하는 최대 스토리지.wslconfig
에 설정된 스토리지만 사용할 수 있음mem_limit
에서 용기의 사용을 제한할 수 있는 저장량.wslconfig
에서 메모리의 최대치를 설정하여 편안한 개발 환경을 만들었다.
Reference
이 문제에 관하여(WSL2+Docker는 메모리를 절약할 수 있습니까), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/takajun/articles/4f15d115548899텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)