[리눅스] 리눅스 컨테이너 리소스 관리

리눅스 컨테이너는 애플리케이션을 격리하고 실행하는 데 사용되는 경량 가상화 기술입니다. 그러나 여러 개의 컨테이너가 호스트 시스템의 리소스를 공유하면서 성능 이슈가 발생할 수 있습니다. 따라서 리눅스 컨테이너의 리소스 관리는 매우 중요합니다.

CPU 리소스 관리

리눅스 커널은 CPU 리소스를 공유하는 여러 컨테이너 간의 공정한 분배를 위해 Cgroups를 제공합니다. 각 컨테이너는 CPU 사용량의 한계를 설정하여 CPU 리소스를 적절히 할당받을 수 있습니다.

$ sudo cgcreate -g cpu:/mygroup
$ sudo cgset -r cpu.cfs_quota_us=100000 /mygroup

위 예제에서는 “/mygroup”이라는 Cgroup을 생성하고, CPU 할당량을 100,000마이크로초로 설정하는 것을 보여줍니다.

메모리 리소스 관리

컨테이너가 과도하게 메모리를 사용하는 것을 방지하기 위해 리눅스 커널은 메모리 Cgroup을 통해 메모리 사용량을 제한할 수 있습니다.

$ sudo cgcreate -g memory:/mygroup
$ sudo cgset -r memory.limit_in_bytes=500m /mygroup

위 예제에서는 “/mygroup”이라는 Cgroup을 생성하고, 최대 메모리 사용량을 500MB로 제한하는 것을 보여줍니다.

네트워크 리소스 관리

각 컨테이너의 네트워크 대역폭을 제어하기 위해 tc 명령어를 사용하여 네트워크 QoS를 적용할 수 있습니다.

$ sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms

위 예제에서는 “eth0” 인터페이스에 대한 대역폭을 1mbit로 제한하는 것을 보여줍니다.

리눅스 컨테이너 리소스 관리는 애플리케이션의 안정성과 성능을 보장하기 위해 매우 중요합니다. 리눅스 커널의 다양한 기능을 이용하여 적절한 리소스 관리를 수행할 수 있습니다.

참고 자료

  1. “Understanding CPU resource limits with cgroups”
  2. “Resource management using cgroups”