![cpulimit begrenzt die CPU-Auslastung nicht wirklich](https://rvso.com/image/164694/cpulimit%20begrenzt%20die%20CPU-Auslastung%20nicht%20wirklich.png)
Ich rufe cpulimit
von ... aus an cron
:
00 16 * * * /usr/bin/cpulimit --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh
Wenn der Job startet, kommt es wie immer zu Spitzenwerten und Alarmen bei der CPU-Auslastung, ohne dass eine tatsächliche Begrenzung festgestellt wurde. Der Job selbst durchläuft ein Verzeichnis mit vielen Unterverzeichnissen und führt rsync
jedes Mal 's aus, was meiner Meinung nach untergeordnete rsync
Prozesse erzeugt (beim Ausführen von top ist eine PID für das aufgerufene rsync verfügbar, das nach einigen Minuten eine andere PID für hat rsync
).
Ich bin nicht sicher, wie ich cpulimit
den Verbrauch dieses Prozesses wirksam begrenzen kann.
Es ist möglicherweise wichtig, im Hinterkopf zu behalten, dass dies eine VM mit 2 GB RAM und 1 vCPU ist.
Antwort1
Standardmäßig cpulimit
werden untergeordnete Prozesse nicht eingeschränkt, daher rsync
wird überhaupt nicht eingeschränkt. Wenn Sie eine aktuelle Version von verwenden, sollten Sie die Option (oder ) cpulimit
verwenden können . (Siehe auch--include-children
-i
diese Antwort.)
$ 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]>.
Dadurch würde sich Ihr Cron-Eintrag wie folgt ändern:
00 16 * * * /usr/bin/cpulimit --include-children --limit 20 /bin/sh /media/storage/sqlbackup/backups.sh
EDIT: Wie der OP (selbst) antwortete, würde es funktionieren, cpulimit
die rsync
Befehle innerhalb des Skripts auszuführen, aber das würde nicht sicherstellen, dass Ihr Skript gut funktioniert, während es andere Funktionen ausführt. Wenn das Skript beispielsweise ein riesiges Verzeichnis verarbeiten muss, könnte es das System verlangsamen und eine CPU-Spitze und einen Alarm verursachen.