cpulimitは実際にはCPUの使用量を制限していません

cpulimitは実際にはCPUの使用量を制限していません

cpulimitここから電話していますcron:

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

ジョブが開始されると、CPU がいつものように急上昇して警告が出ますが、実際に識別可能な制限は発生していません。ジョブ自体は、多数のサブディレクトリのディレクトリを反復処理し、rsyncそのたびに を実行します。これにより、rsync子プロセスが生成されていると考えられます (top を実行すると、呼び出された 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 スパイクとアラートが発生する可能性があります。

関連情報