cgroups или контрольные группы — это функция ядра Linux, которая позволяет администратору распределять или ограничивать системные ресурсы для служб, а также группировать.
Чтобы вывести список активных групп управления, мы можем использовать следующую команду ps —
[root@localhost]# ps xawf -eo pid,user,cgroup,args 8362 root - \_ [kworker/1:2] 1 root - /usr/lib/systemd/systemd --switched- root --system -- deserialize 21 507 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-journald 527 root 7:cpuacct,cpu:/system.slice /usr/sbin/lvmetad -f 540 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-udevd 715 root 7:cpuacct,cpu:/system.slice /sbin/auditd -n 731 root 7:cpuacct,cpu:/system.slice \_ /sbin/audispd 734 root 7:cpuacct,cpu:/system.slice \_ /usr/sbin/sedispatch 737 polkitd 7:cpuacct,cpu:/system.slice /usr/lib/polkit-1/polkitd --no-debug 738 rtkit 6:memory:/system.slice/rtki /usr/libexec/rtkit-daemon 740 dbus 7:cpuacct,cpu:/system.slice /bin/dbus-daemon --system -- address=systemd: --nofork --nopidfile --systemd-activation
Управление ресурсами, начиная с CentOS 6.X, было переопределено в реализации systemd init . Размышляя об управлении ресурсами для сервисов, главное, на чем нужно сосредоточиться — это cgroups . cgroups продвинулись с systemd и в функциональности и в простоте.
Целью cgroups в управлении ресурсами является то, что ни один сервис не может отключить систему в целом. Или ни один сервисный процесс (возможно, плохо написанный скрипт PHP) не нанесет вред функциональности сервера, потребляя слишком много ресурсов.
cgroups позволяют управлять ресурсами для следующих ресурсов:
-
CPU — ограничивает задачи с интенсивным использованием процессора, которые не являются критичными по сравнению с другими, менее интенсивными задачами
-
Память — ограничивает объем памяти, который может использовать служба
-
Диски — Ограничение дискового ввода-вывода
CPU — ограничивает задачи с интенсивным использованием процессора, которые не являются критичными по сравнению с другими, менее интенсивными задачами
Память — ограничивает объем памяти, который может использовать служба
Диски — Ограничение дискового ввода-вывода
** Время процессора: **
Задачи, требующие меньшего приоритета ЦП, могут иметь настраиваемые фрагменты ЦП.
Давайте посмотрим на следующие два сервиса, например.
Вежливое обслуживание ЦП 1
[root@localhost]# systemctl cat polite.service
# /etc/systemd/system/polite.service
[Unit]
Description = Polite service limits CPU Slice and Memory
After=remote-fs.target nss-lookup.target
[Service]
MemoryLimit = 1M
ExecStart = /usr/bin/sha1sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/polite.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
Злой CPU Service 2
[root@localhost]# systemctl cat evil.service
# /etc/systemd/system/evil.service
[Unit]
Description = I Eat You CPU
After=remote-fs.target nss-lookup.target
[Service]
ExecStart = /usr/bin/md5sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/evil.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
Давайте установим Polite Service, используя меньший приоритет CPU —
systemctl set-property polite.service CPUShares = 20 /system.slice/polite.service 1 70.5 124.0K - - /system.slice/evil.service 1 99.5 304.0K - -
Как мы видим, в течение обычного периода простоя системы оба мошеннических процесса все еще используют циклы ЦП. Тем не менее, тот, который настроен на меньшее количество временных интервалов, использует меньше процессорного времени. Имея это в виду, мы можем видеть, как использование меньшего временного интервала позволило бы основным задачам улучшить доступ к системным ресурсам.
Чтобы установить службы для каждого ресурса, метод set-property определяет следующие параметры:
systemctl set-property name parameter=value
| Процессорные слайсы | CPUShares |
| Предел памяти | MemoryLimit |
| Предел мягкой памяти | MemorySoftLimit |
| Вес блока ввода-вывода | BlockIOWeight |
| Предел блокировки устройства (указан в / volume / path)) | BlockIODeviceWeight |
| Читать IO | BlockIOReadBandwidth |
| Запись на диск IO | BlockIOReadBandwidth |
Чаще всего сервисы будут ограничены использованием процессора , ограничениями памяти и операциями чтения / записи .
После изменения каждого необходимо перезагрузить systemd и перезапустить сервис —
systemctl set-property foo.service CPUShares = 250 systemctl daemon-reload systemctl restart foo.service
Настройте CGroups в CentOS Linux
Чтобы создавать собственные cgroups в CentOS Linux, нам нужно сначала установить службы и настроить их.
Шаг 1 — Установите libcgroup (если еще не установлен).
[root@localhost]# yum install libcgroup Package libcgroup-0.41-11.el7.x86_64 already installed and latest version Nothing to do [root@localhost]#
Как мы видим, по умолчанию в CentOS 7 установлена libcgroup с установщиком everything . Использование минимального установщика потребует от нас установки утилит libcgroup вместе с любыми зависимостями.
Шаг 2 — Запустите и включите службу cgconfig.