Cloud/Docker

[따배도] 7. 컨테이너 리소스관리

Tony Lim 2022. 1. 20. 12:13

docker run --help 명령어를 통해 run 을 실행할때 resource 제한 옵션들을 확인 할 수 있다.

컨테이너가 메모리가 정해진 이상을 점유하게되면 스스로 kill 한다.

2번째 예제 = 소프트 제한 값은 최소한 500m은 보장을 해주고 -m 은 최대로 쓸 수 있는 메모리를 의미한다.

3번쨰 예제 = swap memory 300 은 최대 사이즈 200 이 포함되어있는것이다. 따라서 실제로 swap 가능하는 메모리는 100 이다.

4번째 예제 = linux kernel 은 메모리가 부족해지면 OOM Killer 가 process 를 다 kill 하기 시작한다. 해당 옵션을 적용하면 메모리가 부족해도 이 process는 kill 하지 않는다.

 

cpu share 는 그냥 상대값이다. 1024를 1로 보고 계산하면 상대적으로 resource를 분배하게 되는것이다. 비례값

 

다 read write 속도 관련된것이고 상대적이냐 절대적이냐의 차이가 있음

 

resource를 제한한 container의 resource들을 모니터링 할 수 있다.

 

 

실습

부하 테스트 프로그램 으로 stress를 이용한다.

stress --cpu 2 , stress --vm 2 --vm-bytes <사용할 크기> 처럼 사용하게 된다.

stress 를 실행 시켜주는 docker image를 빌드했다.

OOM killer가 허가된 메모리 이상을 쓰니 kill 해버렸다.

위에서 나온 oom killer disable을 설정하면 /sys/fs/cgroup/memory/docker/{container id}/memory.oom_control 에서 oom_kill_disable 1 인것을 확인 할 수 있다.

 

첫번째 경우에는 cpuset-cpus 1임으로 2번 쨰 core만 사용하고

두번째 경우는 cpuset-cpus 0 임으로 1번째 core만 사용하게 된다. htop으로 확인가능하다.

cpuset-cpus 0-1 인 경우 2개중 하나를 번걸아가면서 사용하게 된다.

 

default 는 1024 임으로 현재 지금 4:2:1:1 의 비율로 cpu를 사용하게 된다.

docker stats 로 현재 docker ps로 나오는 컨테이너들이 어찌 돌고 있는지 확인 할 수 있다.

cload1 cpu2개중 1개를 다 쓰고 잇다.

cload2 는 남은 1개의 반을 cload3,4 는 남은 것의 반을(1/4) 사용하고 있는 것을 확인 할 수 있다.

 

컨테이너에 iops 를 10, 100 각각 준것이다.

/bin/bash로 접속하여서 dd 명령어로 1MB 짜리 파일을 10개 생성하는것이다.

quota는 10배 차이나지만 속도는 10.3 에서 254로 25배 정도가 차이난다. 정확히 비례하지 않는다.

https://github.com/google/cadvisor

 

GitHub - google/cadvisor: Analyzes resource usage and performance characteristics of running containers.

Analyzes resource usage and performance characteristics of running containers. - GitHub - google/cadvisor: Analyzes resource usage and performance characteristics of running containers.

github.com

이것을 사용하면 web 으로도 확인이가능하다.