Cron
cpulimit 實際上並沒有限制 CPU 使用率
我打電話
cpulimit
來自cron
:
00 16 * * * /usr/bin/cpulimit --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh
當工作開始時,CPU 會像往常一樣出現峰值並發出警報,而沒有發生實際可辨識的限制。該作業本身迭代許多子目錄的目錄並
rsync
每次執行 ‘,我相信這會產生rsync
子程序(執行 top 將有一個可用於被呼叫的 rsync 的 pid,幾分鐘後將有一個不同的 pidrsync
)。我不確定如何正確利用
cpulimit
以有效限制此過程消耗的使用量。記住這是一個具有 2G RAM 和 1vCPU 的 VM 可能很重要。
預設情況下
cpulimit
不限制子程序,因此rsync
根本不受限制。如果您正在執行足夠新的版本,cpulimit
您應該能夠使用--include-children
(or-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 <marlonx80@hotmail.com>.
這會將您的 cron 條目更改為:
00 16 * * * /usr/bin/cpulimit --include-children --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh
編輯:正如 OP(他們自己)回答的那樣,它適用於腳本
cpulimit
中的rsync
命令,但這並不能確保您的腳本在執行其他功能時很好。例如,如果腳本必須處理一個龐大的目錄,它可能會阻塞系統並導致 CPU 峰值和警報。