cpulimit는 실제로 CPU 사용량을 제한하지 않습니다.

cpulimit는 실제로 CPU 사용량을 제한하지 않습니다.

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 스파이크 및 경고가 발생할 수 있습니다.

관련 정보