CPU-Auslastung des Steuerprozesses mit nice und cpulimit [Linux]
Egal wie schnell Ihre Linux-Maschine ist, es wird immer einige Aufgaben geben, die viel CPU-Zeit verbrauchen. Alles von der Videokodierung bis zum Ausführen mathematischer Modelle kann dazu führen, dass die CPU zu 100% läuft. Dies ist in Ordnung, wenn die Maschine nichts anderes tut. Aber wenn es sich um Ihren Hauptdesktop handelt oder es als Server verwendet wird, führt das Ausführen einer Task, die Ihre CPU auslastet, dazu, dass die Maschine schwerfällig und schwer zu bedienen ist. Die Schönheit eines Multitasking-Betriebssystems ist, dass die Maschine nicht einfriert, da sie immer CPU-Zeit für andere Aufgaben einplant und Dinge wie der Desktop immer noch funktionieren, aber viel langsamer. Der Scheduler hat keine Möglichkeit zu wissen, dass die CPU-intensive Task mit einer niedrigeren Priorität ausgeführt werden soll oder um die CPU-Zeit zu begrenzen. Es gibt jedoch einige Tools, die verwendet werden können, um die Prozess-CPU-Nutzung für diese ressourcenhungrigen Aufgaben zu steuern.
Um eine CPU-intensive Aufgabe zu emulieren, können wir ein Werkzeug namens matho-prime
das eine Liste von Primzahlen generiert. Wenn Sie darum bitten, eine ausreichend große Liste zu erstellen, wird die CPU während der Arbeit maximal ausgelastet. Um matho-prime
auf Ubuntu oder einem Raspberry Pi zu installieren, matho-prime
:
Sudo apt-get installieren Mathe-Primzahlen
Lass uns einfach die Aufgabe starten und die CPU-Auslastung sehen:
Mathe-Primzahlen 0 9999999999> p.txt &
Das sagt matho-primes
, um eine Liste von Primzahlen von null bis neun Milliarden neunhundertneunundneunzig Millionen neunhundertneunundneunzigtausendneunhundertneunundneunzig zu erzeugen! Die Ausgabe wird in die Datei p.txt
umgeleitet. Das kaufmännische Und am Ende teilt der Shell mit, dass das Programm im Hintergrund ausgeführt werden soll. Das bedeutet, dass Sie direkt nach dem Start der Aufgabe zur Eingabeaufforderung zurückkehren.
Führen Sie nun den top
Befehl aus und beachten Sie die CPU-Menge, die vom Primzahlgenerator verwendet wird.
Lassen Sie uns nun diese Aufgabe beenden und schauen, wie wir sie mit einer niedrigeren Priorität starten können. matho-primes
den matho-primes
mit der matho-primes
q
und matho-primes
fg
, um matho-primes
in den Vordergrund zu bringen. matho-primes
dann "Strg + C", um das Programm zu beenden.
Starten Sie nun das Programm erneut, aber am Anfang des Befehls fügen Sie das Wort nice
:
nette Mathe-Primzahlen 0 9999999999> p.txt &
nice
ist ein Tool, das Linux anweist, diese Aufgabe mit einer niedrigeren Priorität zu planen. Die Freundlichkeit reicht von -20 (günstigste Planung) bis 19 (ungünstigste). Standardmäßig wird nice
die Aufgabe mit einer Helligkeit von 10 einplanen. Standardmäßig werden normale Aufgaben mit einer Nichtigkeit von Null gestartet. Das bedeutet, dass eine Aufgabe mit einer Priorität von 10 als weniger wichtig angesehen wird und weniger CPU-Ressourcen erhält.
Wir können nun einen zweiten Primzahlengenerator starten, um andere Aufgaben zu simulieren, die Sie auf Ihrem Rechner ausführen möchten (wie das Surfen im Internet oder das Schreiben eines Dokuments). Dieser wird eine normale Nettigkeit haben, da die Verwendung des Desktops eine höhere Priorität haben sollte als die Ausführung des Primzahlgenerators.
Mathe-Primzahlen 0 9999999999> p2.txt &
Beachten Sie, dass die Ausgabe von dieser Datei zu p2.txt
umgeleitet p2.txt
. Die Ausgabe von top
sieht ungefähr so aus:
Wie Sie sehen können, erhält der Prozess mit der höheren Nettigkeit weniger CPU-Zeit. Dies bedeutet, dass, wenn Sie eine CPU-intensive Aufgabe mit nice
starten, Ihre Maschine nicht träge wird oder langsam reagiert.
cpulimit
Es gibt einen weiteren Befehl mit dem Namen "cpulimit", der statt der Änderung der Planungspriorität vorübergehend einen Prozess pausiert, um sicherzustellen, dass die gewünschte CPU-Auslastung nicht überschritten wird.
Um es zu installieren, geben Sie Folgendes ein:
sudo apt-get installieren cpulimit
Führen Sie nun den CPU-intensiven Primzahlgenerator erneut aus und notieren Sie sich die PID-Nummer mit diesem Befehl:
ps | Grep Mathe-Prime
Die erste Spalte der Ausgabe ist die PID. Beschränken Sie nun die CPU-Nutzung dieses Prozesses wie folgt:
sudo cpulimit -b -l 50 -p 16299
Wobei 16299 die PID des matho-primes
Prozesses ist. Ein Look mit top
wird etwa so aussehen:
Weitergehen
Es gibt einen Companion-Befehl namens renice
der die Nettigkeit eines vorhandenen Prozesses ändert. Probieren Sie die Verwendung von top
oder ps
mit grep
, um die PID eines Prozesses zu erhalten, und verwenden Sie renice +19 16299
, um die Priorität auf den niedrigsten möglichen renice +19 16299
zu setzen (wobei 16299 die PID des Prozesses ist).
Fühlen Sie sich frei, die Diskussion im Kommentar unten hinzuzufügen.