cpulimit não está realmente limitando o uso da CPU

cpulimit não está realmente limitando o uso da CPU

Estou ligando cpulimitde cron:

00 16 * * * /usr/bin/cpulimit --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh

Quando o trabalho é iniciado, a CPU dispara e alerta como sempre, sem que nenhum limite real identificável tenha ocorrido. O trabalho em si itera em um diretório de muitos subdiretórios e executa rsync's a cada vez, o que acredito estar gerando rsyncprocessos filhos (a execução top terá um pid disponível para o chamado rsync, que após alguns minutos terá um pid diferente para rsync).

Não tenho certeza de como utilizar adequadamente cpulimitpara limitar efetivamente o uso que esse processo consome.

Pode ser importante ter em mente que esta é uma VM com 2G RAM e 1vCPU.

Responder1

Por padrão, cpulimitnão limita processos filhos, portanto, rsyncnão está sendo limitado de forma alguma. Se você estiver executando uma versão recente o suficiente, cpulimitpoderá usar a opção --include-children(ou -i). (Veja tambémesta resposta.)

$ cpulimit -h
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 400 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --include-children limit also the children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

Report bugs to <[email protected]>.

Isso mudaria sua entrada do cron para:

00 16 * * * /usr/bin/cpulimit --include-children --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh

EDIT: Como o próprio OP respondeu, funcionaria para cpulimitos rsynccomandos dentro do script, mas isso não garantiria que seu script estivesse sendo legal enquanto executa outras funções. Por exemplo, se o script precisar processar um diretório enorme, ele poderá paralisar o sistema e causar picos e alertas de CPU.

informação relacionada