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를 갖춘 VM이라는 점을 명심하는 것이 중요할 수 있습니다.
답변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가 스스로 대답했듯이 스크립트 내의 명령 cpulimit
에 작동 하지만 다른 기능을 수행하는 동안 스크립트가 훌륭하다는 것을 보장하지는 않습니다. rsync
예를 들어 스크립트가 대규모 디렉터리를 처리해야 하는 경우 시스템이 정체되어 CPU 스파이크 및 경고가 발생할 수 있습니다.