Учебники

Linux Admin — ресурсный Mgmt с crgoups

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.