cpulimit
からcron
を呼び出しています。
00 16 * * * /usr/bin/cpulimit --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh
ジョブが開始されると、CPUはスパイクし、いつものようにアラートを出しますが、実際に識別可能な制限は発生していません。ジョブ自体は多くのサブディレクトリのディレクトリを反復処理し、毎回rsync
を実行します。これは、rsync
の子プロセスを生成していると思います(topを実行すると、呼び出されたrsyncで使用可能なpidがあります。数分でrsync
のpidが異なります)。
cpulimit
を適切に利用して、このプロセスが消費する使用量を効果的に制限する方法がわかりません。
これはVM with 2G RAMおよび1vCPUであることに注意することが重要かもしれません。
デフォルトでは、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のスパイクとアラートが発生する可能性があります。