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

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

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

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

 yum install libcgroup chkconfig cgconfig on service cgconfig start 

Для Debian/:

 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 ...