Источник: Как ограничить использование процессора и памяти с помощью групп в Debian/Ubuntu
Cgroups - это гибкая функция ядра Linux, позволяющая ограничивать, контролировать и использовать ресурсы аккаунта. Cgroup - это набор задач для подсистем, обычно это контроллер ресурсов.
Файловая система типа cgroup монтируется и все операции выполняются над ней.
Установка может быть выполнена с использованием любого из libcgroup, cgmanager или systemd.
Их можно использовать несколькими способами
- Получая прямой доступ к файловой системе cgroup.
- Использование клиента cgm (часть cgmanager).
- Через cgcreate, cgexec и cgclassify (часть cgroup-tools).
- Через cgconfig.conf и cgrules.conf (также является частью cgroup-tools).
Мы будем использовать этот последний вариант, поэтому установите cgroup-tools с
$ sudo apt-get install cgroup-toolsDebian по умолчанию отключает контроллер памяти, мы можем включить его, добавив следующее в /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet cgroup_enable=memory swapaccount=1"
Итак, обновите Grub
$ sudo update-grubТеперь, когда среда и инструменты готовы, мы определим некоторые «роли» в /etc/cgconfig.conf
group app/editor {
cpu {
cpu.shares = 500;
}
memory {
memory.limit_in_bytes = 1000000000;
}
}
group app/browser {
cpu {
cpu.shares = 300;
}
memory {
memory.limit_in_bytes = 1000000000;
}
}
group app/util {
cpu {
cpu.shares = 300;
}
memory {
memory.limit_in_bytes = 500000000;
}
}
Максимальное значение для cpu.shares равно 1000, поэтому 300 устанавливает 30% предела использования для приложения с этой «ролью». memory.limit_in_bytes является самоописательной.
Мы свяжем эти «роли» и приложения в /etc/cgrules.conf
*:emacs cpu,memory app/editor/
*:conkeror cpu,memory app/browser/
*:firefox cpu,memory app/browser/
*:slack cpu,memory app/util/
*:dropbox cpu,memory app/util/
Теперь нам нужно применить правила с помощью команд
$ cgconfigparser -l /etc/cgconfig.conf
$ cgrulesengdДобавьте их в /etc/rc.local для применения при перезагрузке.
Вот и все!
Мы можем проверить, были ли применены наши новые правила, используя
$ cat /proc/`pidof dropbox`/cgroup | grep app
# 5:memory:/app/util
# 2:cpu,cpuacct:/app/utilИ мы можем проверить использование памяти процесса с
smem -P dropbox
# PID User Command Swap USS PSS RSS
# 1955 fernando /home/fernando/.dropbox-dis 0 191800 192388 201124- https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
- https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt
- https://wiki.archlinux.org/index.php/cgroups
- moby/moby#396 (comment)