[DOCKER] docker 컨테이너 자원 할당 제한

Hocaron·2022년 2월 15일
0

DOCKER

목록 보기
1/2
post-custom-banner

DB에서 왜 인덱스가 필요한지. 다양한 성능을 테스트 해보기 위해 docker로 mysql을 띄워서 삽입 및 입력 테스트를 해보려고 한다.🧐
이때, 제한을 걸어서 각각 단계마다 어떤 결과가 나오는지 보려고 한다.
DB에 데이터 삽입 및 쿼리를 날려보기 앞서 docker 컨테이너 자원 할당에 대해 훑고 가자.

docker 컨테이너 자원 할당 제한

제한하려는 자원명령어단위
메모리 자원 할당--memorym(megabyte), g(gigabyte)
swap 메모리 자원 할당--memory-swapm(megabyte), g(gigabyte)
CPU 자원 할당--cpu-shares1024(1cpu)
CPU 자원 할당 (호스트에 CPU가 여러 개 있을 때)--cpuset-cpu사용하고 싶은 특정 cpu (0부터 시작합니다.)
디스크 읽기 쓰기 속도 제한--device-write-bps, --device-read-bpskb, mb, gb

그럼 이제 제한을 걸어서 MySQL을 띄워보자

  1. 이미지 다운로드
    $ docker pull mysql:8.0.27

  2. MySQL 띄우기

  • 1 cpu, 64mb
docker run --name mysql-cpu1-memory64m -e MYSQL_ROOT_PASSWORD=root -d --cpu-shares=1024 --memory=64m -p 3309:3306 mysql:8.0.27

OOM(Out Of Memory) Error가 발생하면서 MySQL이 죽어버렸다.😇

  • 1 cpu, 128mb
docker run --name mysql-cpu1-memory128m -e MYSQL_ROOT_PASSWORD=root -d --cpu-shares=1024 --memory=128m -p 3309:3306 mysql:8.0.27

OOM(Out Of Memory) Error가 발생하면서 MySQL이 죽어버렸다.😇

  • 1 cpu, 256mb
docker run --name mysql-cpu1-memory256m -e MYSQL_ROOT_PASSWORD=root -d --cpu-shares=1024 --memory=256m -p 3309:3306 mysql:8.0.27

드디어 잘 돌아간다.😍

컨테이너의 리소스 사용량 통계를 보자.
docker stats mysql-cpu1-memory256m

docker desktop stats에는 228.3 MB이라고 나와있는데, 왜 다를걸꽈🧐 아무튼 이 정도의 메모리가 필요하구만!

Container가 Host의 OOM Killer에 의해 중지된 경우 STATUS를 Exited (137) xxx ago와 같이 표시한다.
64mb랑 128mb는 중지된 것을 알 수 있다.

Docker and OOM(Out Of Memory) Killer란?
이렇게 memory commit에서는 먼저 주소값만 리턴하고, 해당 주소값에 쓰기 요청이 들어왔을 때 비로서 해당 주소값을 실제 물리 메모리에 바인딩하게 되는데, 이 때 실제 메모리와 가상 메모리공간(Swap memory)을 전부 활용해도 더 이상 메모리 확보가 불가능한 경우, 쓸모없다고 판단되는 프로세스를 강제 종료시켜 여유 메모리를 확보하는 Linux Kernel의 메커니즘을 OOM(Out Of Memory) Killer라고 한다.
여기에 들어가면, 기가 막힌 설명글이 있다.

profile
기록을 통한 성장을
post-custom-banner

0개의 댓글