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/