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 スパイクとアラートが発生する可能性があります。