Qual é a maneira recomendada de lidar com processos controlados se o CGroups falhar?

1

Eu tenho usado a unidade de serviço abaixo para iniciar alguns processos que, por acaso, têm um alto uso de CPU e largura de banda quando executados.

Como os processos que eu quero limitar não têm uma maneira de indicar a quantidade de recursos que eles devem receber, estou usando o CGroups para controlar o quanto eles devem obter dos recursos disponíveis.

O problema é que, se o CGroups falhar, os sistemas deixarão de responder e precisarão ser reiniciados, portanto, gostaria de ter uma maneira de interromper os processos nesse caso.

A unidade de serviço para CGroups deve reiniciar o serviço em caso de falha, mas por algum motivo isso não aconteceu, talvez porque o sistema não tenha respondido.

Eu também não tenho os registros, porque o sistema foi encerrado devido ao alto uso de recursos e não tenho acesso a essas informações até que um administrador remova a suspensão.

A unidade de serviço é limitada

[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

Unidade de serviço 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/
    
por rraallvv 19.11.2018 / 19:06

1 resposta

1

Parece que você está tentando usar coisas antigas para gerenciar cgroups, quando o systemd já tem tudo incorporado para fazer o trabalho. O cgconfig está obsoleto e não deve ser usado quando o systemd estiver em execução.

Você deve dar uma olhada no link

E também link

Para resumir, você deve ser capaz de fazer o que quiser apenas adicionando as palavras-chave de controle de recursos precisas em sua seção [Serviço] e removendo sua unidade de serviço cgroup.

    
por 20.11.2018 / 15:31