
Ich habe eine Reihe von Prozessen mit demselben Namen – sie beanspruchen 100 % meiner CPU-Zeit, ich möchte, dass dieser Anteil nicht mehr als 50 % beträgt.
Wie kann ich dies tun, ohne zusätzliche Software zu installieren?
Antwort1
Um einen Mechanismus hierfür auf Kernelebene zu erhalten, müssen Sie sich über Linux informieren.Kontrollgruppen. Dieser Bereich wird noch aktiv weiterentwickelt. Sie müssen daher sicherstellen, dass das, was Sie lesen, mit dem Kernel übereinstimmt, den Sie haben (oder installieren möchten).
Obwohl Sie sagten, Sie sollten nichts zusätzlich installieren, könnten Sie die Installation in Erwägung ziehen, cgred
um die Verschiebung von Prozessen mit passenden Namen zu Ihrer CPU-Kontrollgruppe zu automatisieren. Unter Debian ist dies im cgroup-bin
Paket enthalten.
Antwort2
Sie können dies mit den Befehlen Bash Shell, Sleep, Pgrep und Pkill unter Verwendung der Signale STOP und CONT tun.
Der folgende Einzeiler sorgt dafür, dass die Prozesse maximal 50 % der insgesamt verfügbaren CPU-Zeit nutzen. Der Prozess wird alle 100 Millisekunden ausgeführt und dann für weitere 100 Millisekunden angehalten.
while [ True ]; do pkill -STOP processname; sleep 0.1s; pkill -CONT processname; sleep 0.1s; done
Hier ist derselbe Code zur besseren Lesbarkeit in mehrere Zeilen aufgeteilt:
while [ True ]
do pkill -STOP processname
sleep 0.1s
pkill -CONT processname
sleep 0.1s
done
Unabhängig davon, wie viele Prozesse vorhanden sind, die dem Prozessnamenmuster entsprechen, können sie 50 % der CPU-Auslastung nicht überschreiten, da sie alle gleichzeitig gestoppt und fortgesetzt werden. Dies bedeutet, dass sie die verfügbare CPU-Zeit untereinander aufteilen müssen, wenn sie aktiv sind. Dadurch wird sichergestellt, dass das Limit eingehalten wird.
Es gibt ein Programm namens „cpulimit“, das ungefähr dasselbe macht.
Antwort3
Ohne zusätzliche Software zu installieren, haben Sie nice
. Der Wertebereich reicht von-20Zu19.
nice -20 some_command
gibt some_command
demhöchste Priorität, Und
nice 19 some_command
gibt some_command
demniedrigste Priorität.
Antwort4
wie oben beschrieben, könnte als Skript verwendet werden, um OOM-Killer zu unterstützen oder auch dessen Verwendung zu verhindern
sagen wir, wenn die CPU-Gesamtauslastung für x Minuten 75 % erreicht, führen Sie pkill.sh aus
../scripts/boottime/OOMkiller.sh
while [ true] ;
do inxi -tcm5 > ~/cpu.log
sleep 0.5s
inxi -tcm5 >> ~/cpu/log | diff -m > ~/offender.log
done
for i in offender.log ;
do ./scripts/pkill.sh
done
../scripts/pkill.sh
while [true]
do pgrep $(i) -STOP $PID
pkill -STOP $PID
sleep 0.5s
pkill -CONT $PID
done