Пример использования cgroup для ограничения ресурсов

Начиная с версии 2.6.24 в ядре Linux содержится очень мощный инструмент — Control Groups (cgroup). Он позволяет ограничить ресурсы центрального процессора, оперативной памяти или подсистемы ввода-вывода, выполнять приоритезацию и изоляцию процессов, прикреплять процессы к конкретным ядрам процессора.

Далее будет приведен пример установки и использования cgroup в популярных дистрибутивах Linux.

Для RHEL/CentOS установка может быть выполнена следующим образом:

 yum install libcgroup
 chkconfig cgconfig on
 service cgconfig start

Для Debian/Ubuntu:

 apt-get install cgroup-bin libcgroup1

Проверям что croup работает:

 lssubsys -am 
cpuset /sys/fs/cgroup/cpuset
cpu /sys/fs/cgroup/cpu
cpuacct /sys/fs/cgroup/cpuacct
memory /sys/fs/cgroup/memory
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
blkio /sys/fs/cgroup/blkio
perf_event /sys/fs/cgroup/perf_event

Далее приведем пример ограничение ресурсов CPU и памяти для веб-сервера в Debian/Ubuntu:
Настройки контрольных групп расположены в конфигурационном файле /etc/cgconfig.conf.

group apache2 {
    perm {
        admin {
            uid = root;
        }
        task {
            uid = www-data;
        }
    }
    cpu {
    	cpu.shares = 500;
    }
    memory {
        memory.limit_in_bytes = 1073741824;
        memory.memsw.limit_in_bytes = 1073741824;
    }
}
  • cpu.shares — относительная величина, которая определяет доступное процессорное время.
  • memory.limit_in_bytes — ограничение на используемую память
  • memory.memsw.limit_in_bytes — ограничение на используемые память + своп

За автоматическое назначение процессов в контрольные группы отвечает конфигурационный файл /etc/cgrules.conf и демон cgrulesengd.

#  	  	
 www-data       cpu,memory      apache2

Перезапускаем сервисы для применения конфигов

 service cgconfig restart
 service cgred restart

Проверяем, что интересующие нас процессы попали под наблюдение:

 cat /sys/fs/cgroup/cpu/apache2/tasks
1244
1246
1247
...
 cat /sys/fs/cgroup/memory/apache2/tasks
1244
1246
1247
...

6 комментариев “Пример использования cgroup для ограничения ресурсов”

Комментирование закрыто.