컨테이너 리소스 제한
가볍지만 기본적으로 제한 X
제한 설정 X = 호스트 전체 자원 사용 가능
→ 반드시 제한 설정
cgroup (Control Group)
-
Linux 커널 기능
-
프로세스 그룹 단위로 자원 제한 가능
- CPU
- Memory
- Block I/O
- PIDs
- HugePages
-
Docker 내부
- 전용 cgroup 생성
- 해당 컨테이너 프로세스 묶음
- 설정값 cgoup 파일에 기록
CPU 리소스 제한
- cpu = 시간 제한
- docker 은 CFS(Completely Fair Scheduler) 사용
- 기본 기준 100ms (0.1s) = period
quota / period
quota = period × cpus 값(기본 period = 100ms)
CPU Shares (상대 우선 순위)
docker run -d --cpu-shares=512 nginx- 기본값 1024
- 경쟁 상황에서만 의미
- 단독 실행 시 효과 X
cpuset-cpus (코어 고정)
docker run -d --cpuset-cpus="0" nginx- 특정 코어만 사용
- NUMA(Non-Uniform Memory Access) 환경에서 중요
Memory 리소스 제한
-
cpu → 느려짐 / mem → 프로세스 종료
-
기본 제한 :
docker run -d --memory=256m ubuntu sleep infinity- 최대 RAM 256MB
- 초과 시 reclaim 후 OOM
swap
docker run -d \
--memory=256m \
--memory-swap=512m \
ubuntu
- RAM 256MB
- RAM + swap 총합 512MB
swap 완전 금지
docker run -d \
--memory=256m \
--memory-swap=256m \
ubuntu
→ swap 사용 X
- Exit Code 137
128 + 9 (SIGKILL)- OOM Killer 가 프로세스 강제 종료
리소스 확인 명령어
-
docker stats- CPU %
- Memory / Limit
- 네트워크
- Block I/O
-
docker inspect: ex)docker inspect mem_test- CpuQuota
- CpuPeriod
- Memory
실행 중 리소스 변경
docker update --cpus=0.3 --memory=200m mem_test
- 재시작 X → 즉시 적용
기본 원칙
모든 컨테이너 Memory 제한 설정
CPU quota 설정
swap 정책 명확히
DB/Cache는 여유 있게