나는 다음 cpulimit
과 같이 시작했습니다 cron
:
00 16 * * * /usr/bin/cpulimit --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh
작업이 시작되면 평소처럼 CPU가 급증하고 경고음이 울리지만 실제로 식별 가능한 조절은 발생하지 않습니다. 작업 자체는 많은 하위 디렉터리로 구성된 디렉터리를 반복하며 rsync
실행될 때마다 이것이 rsync
하위 프로세스를 생성한다고 생각합니다(실행 상단에는 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
cpulimit
편집: OP(자체)가 답변했듯이 스크립트 내의 명령 에 대해서는 작동 rsync
하지만 다른 기능을 수행할 때 스크립트가 좋을 것이라는 보장은 없습니다. 예를 들어, 스크립트가 많은 수의 디렉터리를 처리해야 하는 경우 시스템이 정체되어 CPU 스파이크 및 경고가 발생할 수 있습니다.