cpulimit 实际上并没有限制 CPU 使用率

cpulimit 实际上并没有限制 CPU 使用率

cpulimitcron:

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

当作业开始时,CPU 会像往常一样出现峰值并发出警报,但没有发生实际可识别的限制。该作业本身会迭代一个由许多子目录组成的目录,并rsync每次执行 's ,我相信这会产生rsync子进程(运行 top 将有一个可用于调用的 rsync 的 pid,几分钟后将有一个不同的 pid rsync)。

我不确定如何正确利用cpulimit来有效限制此过程消耗的使用量。

重要的是要记住这是一个具有 2G RAM 和 1vCPU 的虚拟机。

答案1

默认情况下cpulimit不限制子进程,因此根本rsync不受限制。如果您运行的是足够新的版本,cpulimit您应该能够使用--include-children(或-i) 选项。 (也可以看看这个答案.)

$ 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]>.

这会将您的 cron 条目更改为:

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

编辑:正如OP(他们自己)回答的那样,它将适用cpulimitrsync脚本中的命令,但这并不能确保您的脚本在执行其他功能时很好。例如,如果脚本必须处理大量目录,则可能会使系统陷入困境并导致 CPU 峰值和警报。

相关内容