Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
2.8. Перенос процесса в контрольную группу
Процесс можно переместить с помощью команды
cgclassify
:
~]# cgclassify -g cpu,memory:group1 1701
Формат:
cgclassify -g
подсистемы:путь PID
.
- подсистемы — список подсистем, разделенных запятой. Если указать
*
, то будут выбраны все подсистемы, которым принадлежат указанные процессы. Если в разных иерархиях есть группы с одним и тем же именем,-g
переместит процессы в каждую группу. - путь — путь к группе из корня иерархии.
- PID — список идентификаторов процессов, разделенных запятой.
Дополнительный аргумент
-- sticky
перед идентификатором процесса оставляет дочерние процессы в текущей контрольной группе. Если аргумент не указан, и в то же время выполняется cgred, дочерние процессы будут переназначены в соответствии с настройками в /etc/cgrules.conf
. Сам процесс будет оставаться в исходной контрольной группе.
С помощью
cgclassify
можно сразу переместить несколько процессов. Следующая команда переместит процессы с PID 1701
и 1138
в группу group1
:
~]# cgclassify -g cpu,memory:group1 1701 1138
Идентификаторы процессов разделяются пробелом, а указанные группы должны принадлежать разным иерархиям.
Создание иерархии в оболочке
Чтобы напрямую переместить процесс в группу, запишите его PID в файл
tasks
этой группы. Команда переноса процесса 1701
в /cgroup/lab1/group1/
будет выглядеть так:
~]# echo 1701 > /cgroup/lab1/group1/tasks
2.8.1. cgred
Служба cgred отвечает за перенос заданий в контрольные группы на основе заданных в
/etc/cgrules.conf
параметров. Записи в /etc/cgrules.conf
могут следовать следующим форматам:
- пользователь иерархии контрольная_группа
- пользователь:команда иерархии контрольная_группа
Например:
maria devices /usergroup/staff
В этом примере все процессы, принадлежащие пользователю
maria
, будут обращаться к подсистеме devices
в соответствии с заданными для группы /usergroup/staff
параметрами. Чтобы сопоставить отдельные команды контрольным группам, укажите их после имени пользователя:
maria:ftp devices /usergroup/staff/ftp
То есть если пользователь
maria
выполняет команду ftp
, процесс будет автоматически перемещен в группу /usergroup/staff/ftp
в иерархии, содержащей подсистему devices
. Стоит отметить, что перенос процесса будет осуществлен только при выполнении указанного условия, поэтому может оказаться так, что ftp
некоторое время будет выполняться не в той группе. Более того, если процесс создает другие процессы во время выполнения в другой группе, нет гарантии, что дочерние процессы будут корректно перемещены.
Записи в
/etc/cgrules.conf
могут включать дополнительные выражения:
@
перед именем пользователя обозначает не отдельного пользователя, а группу. Например,@admins
включает всех пользователей в группеadmins
.*
охватывает все компоненты. Так,*
в поле подсистем обозначает все подсистемы.%
копирует элементы из предыдущей строки. Например:@adminstaff devices /admingroup @labstaff % %