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.