Wie kann die CPU-Auslastung einer Prozessgruppe mit Standard-GNU/Linux-Tools begrenzt werden?

Wie kann die CPU-Auslastung einer Prozessgruppe mit Standard-GNU/Linux-Tools begrenzt werden?

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, cgredum die Verschiebung von Prozessen mit passenden Namen zu Ihrer CPU-Kontrollgruppe zu automatisieren. Unter Debian ist dies im cgroup-binPaket 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_commanddemhöchste Priorität, Und

nice 19 some_command

gibt some_commanddemniedrigste 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

verwandte Informationen