# Cgroups Manager (Linux)

В некоторых случаях один сайт на виртуальном хостинге может захватить все системные ресурсы и таким образом нарушить работу других сайтов. Такую проблему называют «noisy neighbor problem (проблемой шумного соседа)».

Plesk Cgroups Manager — расширение, которое помогает справиться с этой проблемой путём управления использованием процессора, памяти и пропускной способности для чтения с диска и записи на диск.

Для каждого из системных ресурсов Cgroups Manager позволяет:

- Установить максимальное значение (ограничение) для ресурса.
- Наблюдать за потреблением ресурса и отправлять по электронной почте уведомления, когда оно превышает некоторый уровень (порог).

Вы можете настроить Cgroups Manager и установить ограничение на потребление ресурса на следующих уровнях:

- Для тарифного плана, затрагивая все привязанные к нему подписки.
- Для отдельной подписки.

Примечание

Чтобы использовать Cgroups на сервере Plesk с персональным ядром, вам нужно указать ряд параметров при компиляции ядра.

## Требования

### Лицензия Plesk

Cgroups manager доступен в следующих изданиях Plesk:

- Plesk Web Pro
- Plesk Web Host

Если вы используете издание Web Admin и хотите управлять использованием ресурсов на сайтах, вы можете обновить ваше издание до Web Pro и распределить сайты между несколькими подписками.

### Лицензия расширения

Cgroups Manager – платное расширение. Его можно купить отдельно или как часть комплекта Hosting Pack.

### Операционная система и система инициализации

Cgroups Manager доступен на следующих операционных системах:

- Debian 8
- Ubuntu 16.04 и Ubuntu 18.04
- CentOS 7
- Red Hat Enterprise Linux 7

По умолчанию дистрибутивы всех этих операционных систем используют систему инициализации systemd, которая требуется для работы Cgroups Manager. Однако Plesk может также быть установлен на Debian, где используется другая система инициализации – System V. Чтобы проверить, какая система инициализации используется в настоящий момент, выполните команду `cat /proc/1/comm` в интерфейсе командной строки.

Примечание

Примечание: Если вы установите Cgroups Manager на Debian с системой инициализации System V, Plesk заменит её на systemd. Вам надо будет перезагрузить систему вручную после установки, чтобы изменения вступили в силу.

### Ограничения для Debian 8

По умолчанию Cgroups Manager предоставляет ограниченную функциональность в операционной системе Debian 8, ядро которой не поддерживает ограничения на использование процессора и памяти. Читайте больше о Cgroups Manager для Debian 8 и возможных решениях проблем.

### Ограничения для Virtuozzo 6 и 7

В Plesk, установленном в контейнере Virtuozzo 6, можно управлять только использованием памяти. В Plesk, установленном в контейнере Virtuozzo 7, можно управлять использованием памяти и процессора, но нельзя управлять использованием пропускной способности для чтения с диска и записи на диск. Если Plesk установлен на виртуальной машине Virtuozzo, его не касаются эти ограничения.

If your system does not meet some requirements, you can migrate Plesk to one that meets them.

## Установка

Чтобы включить Cgroups Manager:

1. Установите компонент Resource Controller (Cgroups) с помощью установщика Plesk:

   1. Перейдите в раздел Инструменты и настройки

   2. Нажмите Обновления

   3. Нажмите Установить/удалить компоненты

   4. Выберите «Resource Controller (Cgroups)» и нажмите Продолжить.

      Примечание

      Примечание. Если необходимый компонент отсутствует в списке доступных компонентов, убедитесь, что ваша система отвечает требованиям.

2. Запустите компонент:

   1. Перейдите в раздел Инструменты и настройки
   2. Нажмите Управление службами
   3. Запустите службу «Resource Controller (Cgroups)».

## Настройка Cgroups Manager

Примечание

Предупреждение. Неправильная конфигурация Cgroups Manager может замедлить работу сайтов или даже сделать их недоступными. Пожалуйста, убедитесь, что вы прочитали и поняли инструкции из этого раздела перед тем, как делать какие-либо изменения.

Вы можете настроить Cgroups Manager на следующих уровнях:

- Для тарифного плана, затрагивая все привязанные к нему подписки.
- Для отдельной подписки.

Настройки на уровне подписки имеют более высокий приоритет, чем настройки на уровне тарифного плана. Дополнительные планы не могут быть использованы для изменения настроек Cgroups Manager.

После установки и запуска службы становятся доступны следующие инструменты настройки:

Инструмент | Тарифный план | Подписка
--- | --- | ---
Панель Plesk (в режиме Service Provider) | Перейдите на страницу Тарифные планы > откройте вкладку Хостинг-планы. Нажмите имя тарифного плана, для которого вы хотите сконфигурировать Cgroups Manager. Откройте вкладку Память, процессор, ввод-вывод диска. | Перейдите в раздел Подписки. Нажмите имя подписки, для которой вы хотите скнофигурировать Cgroups Manager. Нажмите Настроить > откройте вкладку Память, процессор, ввод-вывод диска.
Plesk CLI | Используйте опции `-cgroups*` утилиты service_plan. | Используйте опции `-cgroups*` утилиты subscription_settings.
Plesk XML API | Смотрите раздел документации Managing Service Plans. | Смотрите раздел документации Managing Subscriptions.

## Ограничение потребления ресурсов

### Установка ограничений

Первой настройкой для каждого управляемого ресурса является значение ограничения. Каждый управляемый ресурс имеет свое значение ограничения. По умолчанию значения ограничений не выставлены, что означает, что ресурсы не ограничены.

Подписки могут делить между собой настройки ограничений, но у каждой из них есть свое ограничение.

Если ресурс ограничен для данной подписки:

- Cgroups Manager следит за всеми процессами, запущенными системным пользователем подписки. Все эти процессы в совокупности не могут превысить ограничение по использованию каждого ресурса.
- Если подписка достигает ограничения, операционная система выполняет некоторое действие в зависимости от типа ресурса.
- Подписка не может превышать ограничение, даже если на сервере имеются свободные ресурсы соответствующего типа (незанятые циклы процессора, свободная память и т.д.).

Если ресурс не ограничен для данной подписки:

- Процессы подписки могут использовать этот ресурс в доступном количестве.
- Ресурс делится между процессами подписки:
  - Процессорное время и пропускная способность чтения с диска и записи на диск делятся почти поровну.
  - Память делится в зависимости от потребности процессов.

В обоих случаях нельзя гарантировать, что подписка получит какое-либо минимальное доступное количество ресурса.

### Допустимые значения настроек для ограничений

Настройки ограничений могут принимать следующие значения:

Настройка | Единица измерения | Допустимые значения
--- | --- | ---
Ограничение на использование процессора | Процент используемого процессорного времени, где 100% – это полное использование ядра процессора | Не более, чем 100% * Число ядер процессора
Ограничение на использование памяти | Байт | Не менее 1МБ
Скорость ввода (записи) на диск | Байт в секунду | Не менее 1МБ в секунду
Скорость вывода (чтения) с диска | Байт в секунду | Не менее 1МБ в секунду

Если процессор на сервере имеет несколько ядер, доступное количество процессорного времени равно 100% * количество ядер процессора. Например, если на вашем сервере есть четыре ядра процессора, доступное количество процессорного времени равно 400%.

### Как система управляет потреблением ресурсов

Когда процессы отдельной подписки используют максимально допустимое количество того или иного ресурса, операционная система выполняет некоторые действия в зависимости от типа ресурса.

Перерасход ресурса | Действия | Последствия
--- | --- | ---
Процессор, чтение с диска и запись на диск | Система не позволяет процессам этой подписки использовать количество ресурса, превышающее ограничение. | Соответствующие сайты могут начать работать медленнее, и их время отклика может увеличиться.
Память | Когда процессы отдельной подписки достигают ограничения по использованию памяти, система уничтожает процесс, потребляющий наибольший объем памяти. | Соответствующий сайт может некоторое время быть недоступен и отвечать на HTTP-запросы с кодами ответа 5xx (ошибка сервера).

## Наблюдение за использованием ресурсов и уведомления о нем

### Настройка наблюдения и уведомлений

Если вы установили ограничение на использование ресурса, вы можете также настроить в Plesk наблюдение за использованием этого ресурса.

Чтобы включить наблюдение, установите следующие значения:

- Порог («Уведомить при превышении» в пользовательском интерфейсе Plesk).
- Период

Чтобы выключить наблюдение, удалите соответствующее значение порога.

### Допустимые значения настроек наблюдения

Настройки наблюдения могут принимать следующие значения:

Настройка | Единица измерения | Допустимые значения
--- | --- | ---
Ограничение на использование процессора | Процент используемого процессорного времени, где 100% – это полное использование ядра процессора | Не более, чем ограничение на использование процессора
Ограничение на использование памяти | Байт | Не менее 1МБ и не более, чем ограничение на использование памяти
Скорость ввода (записи) на диск | Байт в секунду | Не менее 1МБ в секунду и не более, чем ограничение на скорость записи на диск
Скорость вывода (чтения) с диска | Байт в секунду | Не менее 1МБ в секунду и не более, чем ограничение на скорость чтения с диска
Период проверки (для любого ресурса) | Секунда | 300 (5 минут), 3600 (1 час) или 86400 (24 часа)

### Как система производит наблюдение

Когда вы включаете наблюдение для одного или более ресурсов, Cgroups Manager начинает наблюдать за их использованием. Если вы включили наблюдение за ресурсами на уровне подписки, будет вестись наблюдение за использованием ресурсов для этой подписки. Если вы включили наблюдение за ресурсами на уровне тарифного плана, будет вестись наблюдение за использованием ресурсов для всех подписок, связанных с этим тарифным планом:

1. Каждые пять минут Cgroups Manager считает средний расход ресурсов для подписки и отмечает случаи, когда он достигает `порога` или превышает его.
2. В течение каждого `периода` Cgroups Manager проверяет, сколько раз для подписки было превышено значение `порога` за последний `период` времени.
   - Если для подписки `порог` был превышен во всех интервалах `периода`, Cgroups Manager отправляет уведомление по электронной почте.
   - Если это происходит в течение более чем одного `периода`, дополнительные уведомления не отправляются.

### Пример наблюдения

Этот пример поможет вам лучше понять, как Cgroups Manager производит наблюдение и инициирует отправку уведомлений.

Рассмотрим тарифный план P со следующими настройками:

Настройка | Значение
--- | ---
Ограничение на использование процессора | 200%
Порог использования процессора | 160%
Период проверки для процессора | 1 час

Как говорилось выше, 100% означает, что ядро процессора полностью загружено.

К тарифному плану привязано две подписки: A и B.

В подписке A есть задача, интенсивно использующая процессор, которая выполняется каждый час, и её выполнение занимает около 10 минут. В течение этих 10 минут процессы подписки потребляют более 160% процессорного времени. В остальное время подписка потребляет менее 160% процессорного времени. Для уведомлений не имеет значения, достигает ли она ограничения.

Сайт в подписке B находится под высокой нагрузкой. Процессы этой подписки всегда потребляют более 160% процессорного времени.

Cgroups Manager считает средний расход ресурсов каждые 5 минут. По прошествии одного часа у него есть следующие результаты:

- Подписка A превысила порог в двух интервалах из 12. Cgroups Manager не станет отправлять уведомление.
- Подписка B превысила порог во всех 12 интервалах. Cgroups Manager отправит уведомление, но не станет повторять его в случае, если высокая нагрузка на сайт продолжится.

### Получатели и текст уведомлений

Чтобы выбрать, кому будут отправлены уведомления:

1. Перейдите в раздел Инструменты и настройки > Уведомления.
2. Выберите получателей напротив пункта Память, процессор, ввод-вывод диска (Cgroups).

Текст каждого уведомления составляется на основе шаблона. Чтобы прочитать и изменить шаблон:

1. Перейдите в раздел Инструменты и настройки > Уведомления.
2. Нажмите крайнюю кнопку справа напротив пункта Память, процессор, ввод-вывод диска (Cgroups).

Более подробную информацию можно найти в главе документации об автоматических почтовых уведомлениях.

## Ограничения

Некоторые технические и коммерческие проблемы не могут быть решены с помощью управления ресурсами:

- Клиенты, которые превысили расход ресурсов раньше, скорее всего, будут испытывать проблемы с производительностью сайтов.
- Cgroups Manager не подсчитывает и не ограничивает ресурсы для веб-приложений Ruby, Python и Node.js, которые используют Phusion Passenger.

## Отключение Cgroups Manager

Чтобы отключить функциональность Cgroups Manager, добавьте следующие строки в файл panel.ini:

    [resourceController]
    enabled = false