Назад | Перейти на главную страницу

Каков рекомендуемый способ работы с контролируемыми процессами в случае сбоя CGroups?

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

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

Проблема в том, что если CGroups выходит из строя, системы перестают отвечать, и их необходимо перезапустить, поэтому я хотел бы иметь способ остановить процессы в этом случае.

Сервисный блок для CGroups должен перезапустить сервис в случае сбоя, но по какой-то причине этого не произошло, возможно, из-за того, что система перестала отвечать.

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

Единица обслуживания будет ограничена

[Unit]
Description=HIGH RESOURCES USAGE daemon                                
After=cgroups.service network.target

[Service]
User=myuser
Group=myuser

ExecStart=/usr/bin/xxxxxxxx
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/xxxxxxxx
WorkingDirectory=/home/myuser

[Install]
WantedBy=multi-user.target

Подразделение обслуживания CGroups

[Unit]
Description=Load cgroup configs
After=remote-fs.target

[Service]
Type=forking
ExecStartPre=/bin/echo "Processing /etc/cgconfig.conf..."
ExecStartPre=/usr/sbin/cgconfigparser -l /etc/cgconfig.conf
ExecStartPre=/bin/echo "Processing /etc/cgrules.conf..."
ExecStart=/usr/sbin/cgrulesengd --logfile=/var/log/cgrulesengd.log
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

cgconfig.conf

group app_limit {
    cpu {
        cpu.cfs_quota_us = 200000
        cpu.cfs_period_us = 1000000
    }
    blkio {
        blkio.throttle.read_iops_device = "253:0 35";
        blkio.throttle.write_iops_device = "253:0 35";
        blkio.throttle.write_bps_device = "253:0 262144000";
    }
}

cgrules.conf

myuser  cpu,blkio   app_limit/

Похоже, вы пытаетесь использовать старые вещи для управления контрольными группами, когда в systemd уже есть все встроенное для выполнения этой работы. cgconfig устарел и не должен использоваться там, где работает systemd.

Вы должны взглянуть на https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html

А также https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/sec-Modifying_Control_Groups#sec-Modifying_Unit_Files

Подводя итог, вы должны иметь возможность делать то, что хотите, просто добавляя точные ключевые слова управления ресурсами в раздел [Служба] и удаляя свой служебный модуль cgroup.