WSL2+Docker는 메모리를 절약할 수 있습니까

7598 단어 DockerWSLWSL 2tech
WSL2+Docker 같은 환경에서 크롬을 켜면서 VScode로 프로그래밍을 하면 메모리가 엉망진창으로 소모된다.메모리 사용률은 99퍼센트다.마우스도 제대로 작동하지 않는다.이렇게 되면 아무것도 할 수 없기 때문에 WSL2+Docker 환경에서 메모리를 절약할 수 없다는 것을 조사했다.
결론적으로 쓰기.wslconfig는 메모리 사용량을 억제할 수 있다.
각종 시행 결과 메모리 사용률은 개선됐지만 기대에 미치지 못했다(99%=>89%~94% 사이에서 안정화).
2021/4/25 보충.wslconfig에서 누락[wsl2]..wslconfig에서는 [wsl2]를 설정 파일의 맨 위에 기록할 필요가 있다.
설정 파일을 정확하게 쓰고 wsl2를 다시 시작하면 PC의 메모리 사용률이 70% 안팎으로 떨어진다.
아래 영상을 보니 .wslconfig 의 작법에 오류가 있었다.이 영상은 wsl2를 사용할 때 곤란해지기 쉬운 다른 대책법도 설명해 참고할 수 있다.
다음은 조사 방법과 대책 등을 적는다.

환경 정보


windowsキー + r에서 winver 실행

메모리 및 CPU

메모리 사용 확인


다음 몇 가지 점에서 메모리 사용 상황을 확인하세요.
  • 전체 Windows 스토리지
  • WSL2에 사용되는 스토리지
  • WSL2의 Ubuntu18입니다.04 사용 스토리지
  • Docker/docker-compose가 사용하는 메모리
  • 작업 관리자가 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
    
    컨테이너 레벨에서 메모리의 상한선이 설정되었습니다.

    궁극

  • 전체 Windows 스토리지
  • Vmmem은 대량의 메모리를 소모
  • Vmmem은 wsl2의 메모리 프로세서(wsl는 기본 설정에서 최대 PC의 80%를 사용하는 메모리)를 나타낸다
  • Vmmem에서 사용하는 메모리의 최대값은 .wslconfig에 기재된 설정을 통해 제한할 수 있다
  • WSL2에 사용되는 스토리지
  • .wslconfig에서 WSL2가 사용하는 최대 스토리지
  • WSL2의 Ubuntu18입니다.04 메모리 사용
  • .wslconfig에 설정된 스토리지만 사용할 수 있음
  • 확인
  • Docker/docker-compose에 사용되는 스토리지
  • mem_limit에서 용기의 사용을 제한할 수 있는 저장량
  • 컨테이너를 가동해 크롬으로 조사하면서 VScode로 프로그래밍하면 메모리 사용률도 60~70% 사이에서 안정화된다..wslconfig에서 메모리의 최대치를 설정하여 편안한 개발 환경을 만들었다.

    좋은 웹페이지 즐겨찾기