So begrenzen Sie die CPU -Verwendung eines Prozesses unter Linux

So begrenzen Sie die CPU -Verwendung eines Prozesses unter Linux
In Ihrer Linux-Lebenszeit müssen Sie einige Prozesse gesehen haben, in denen alle CPU-Zyklen (90-99% CPU-Verwendung) eingenommen haben. Das kann in Ordnung sein, wenn der Vorgang einige Sekunden dauert, bis es abgeschlossen ist. Aber was ist, wenn es lange dauert? Das ist nicht sehr schön, Ihren nicht reagierenden Computer für Minuten und Stunden zu sitzen und zu sehen, richtig, richtig? Nun, Linux hat viele großartige Werkzeuge, um diese zu machen nicht sehr nett Prozesse Zu Hübsch Prozesse.

Sie können festlegen, wie viel CPU ein einzelner Prozess haben darf. Wenn der Prozess wirklich viel CPU -Strom benötigt, können Sie ein paar Befehle ausführen, um ihm alle Leerlauf -CPU -Zyklen zu geben (CPU -Zyklen, die Sie nicht benötigen). Auf diese Weise müssen Sie niemals lange auf Ihren unaufhaltsamen Computer sitzen und auf den Kopf starren.

In diesem Artikel werde ich Ihnen zeigen, wie Sie die CPU -Verwendung eines Prozesses unter Linux einschränken können. Ich werde CentOS 7 in diesem Artikel verwenden. Aber jede moderne Linux -Verteilung sollte funktionieren. Also lasst uns anfangen.

Begrenzung der CPU -Nutzung mit Nizza und Renice:

Unter Linux können die Prioritäten jeder laufenden Prozesse geändert werden. Sie können den Prozess, der für Sie wichtiger ist.

Jeder Prozess unter Linux hat einen guten Wert. Der Wert von Nizza bestimmt, welcher Prozess höhere Prioritäten hat und welcher niedriger ist. Ein guter Wert kann zwischen -20 und 19 liegen. Ein Prozess mit dem guten Wert von -20 hat die höchste Priorität und verwendet die meisten CPU -Zyklen. Ein Prozess mit dem schönen Wert 19 hat die niedrigste Priorität und nutzt die CPU, wenn keine anderen Prozesse sie nur verwenden.

Es gibt zwei Möglichkeiten, den guten Wert eines Prozesses festzulegen. Sie können entweder einen Prozess mit dem starten Hübsch Befehl zum Festlegen eines schönen Wertes beim Starten des Vorgangs. Oder Sie können die verwenden Renice Befehl zum Festlegen eines guten Wertes nach Beginn eines Vorgangs.

Führen Sie den Vorgang wie folgt aus, um einen guten Wert zu setzen, wenn Sie einen Prozess starten:

$ nice -n nice_value command_to_run

NOTIZ: Hier Nice_value kann alles sein von -20 bis 19 Und Command_to_run ist ein Befehl, den Sie mit dem schönen Wert von ausführen möchten Nice_value.

Sagen wir zum Beispiel, Sie möchten die ausführen schlafen Befehl mit dem schönen Wert von 14. Führen Sie den Befehl wie folgt aus:

$ nice -n 14 schlafen 40000 &

Jetzt können Sie überprüfen, ob der nette Wert mit dem oberen Befehl korrekt eingestellt wird. Sie können alle Prozesse mit dem folgenden Befehl auflisten, die Sie gestartet haben (als Login -Benutzer):

$ ps -fl

Wie Sie sehen können, wird der nette Wert des Prozesses auf 14 gesetzt.

Wenn Sie nun den guten Wert Ihrer vorhandenen Prozesse ändern möchten, benötigen Sie nur die Prozess -ID (PID) des Prozesses, dessen Wert der nette Wert ändern möchten. Du kannst den ... benutzen PS Aux Befehl oder der Spitze Befehl, um die Prozess -ID oder PID zu finden.

Dann kannst du rennen Renice Befehl wie folgt, um den netten Wert eines vorhandenen Prozesses zu ändern:

$ sudo renice -n new_nice_value -p process_pid

Wie Sie sehen können, wird der nette Wert des Prozesses mit PID 6422 geändert.

Begrenzung der CPU -Nutzung mit CGroups:

Die vollständige Form von CGROUPS Ist COntrol GRupien. Es handelt sich um ein Linux -Kernelfunktion, mit dem Ressourcen auf Prozessgruppen wie (CPU, Speicher, Berechtigungen und vieles mehr) unter Linux beschränkt werden.

Alles, was Sie tun müssen, ist, eine neue Prozessgruppe zu erstellen und Ihre Prozesse, auf die Sie Ressourcen beschränken möchten, dieser Gruppe zu beschränken. Einfach!

CGroups -Management -Tools sind standardmäßig nicht in CentOS 7 installiert. Es ist jedoch im offiziellen Paket -Repository von CentOS 7 erhältlich.

Aktualisieren Sie zuerst den YUM -Paket -Repository -Cache mit dem folgenden Befehl:

$ sudo yum makecache

Installieren Sie nun CGroups -Management -Tools mit dem folgenden Befehl:

$ sudo yum Installieren Sie libcGroup-Tools

Jetzt drücken y und dann drücken Sie .

Es sollte installiert werden.

Sie können die CPU -Verwendung einer einzelnen Gruppe einschränken. Beispielsweise können Sie CGroups verwenden, um einen Prozess innerhalb einer CGroup zu untersuchen .1s von allen 1s) der CPU -Zeit.

Erstellen Sie zuerst eine CGroup mit dem folgenden Befehl:

$ sudo cgcreate -g cpu:/cpulimit

NOTIZ: Hier, cpulimit ist der Gruppenname, der die kontrolliert Zentralprozessor Verwendung.

Jetzt müssen Sie einstellen Zentralprozessor.CFS_PERIOD_US Und Zentralprozessor.CFS_QUOTA_US Eigentum auf der cpulimit Gruppe.

In diesem Beispiel sollten 1000 ms (Millisekunden) oder 1000000us (Mikrosekunden) auf eingestellt werden Zentralprozessor.CFS_PERIOD_US Eigenschaft und 100 ms oder 100000us sollten auf die festgelegt werden Zentralprozessor.CFS_QUOTA_US Eigentum.

Führen Sie die folgenden Befehle aus, um diese Eigenschaften auf die zu setzen cpulimit Gruppe:

$ sudo cgset -r cpu.cfs_period_us = 1000000 cpulimit
$ sudo cgset -r cpu.cfs_quota_us = 100000 cpulimit

Jetzt können Sie den folgenden Befehl ausführen, um zu überprüfen, ob alle Eigenschaften korrekt festgelegt sind:

$ sudo cgget -g cpu: cpulimit

NOTIZ: Hier, cpulimit ist der Name der Cgroup und Zentralprozessor ist die Ressource, die ich einschränke.

Wie du sehen kannst, Zentralprozessor.CFS_PERIOD_US Und Zentralprozessor.CFS_QUOTA_US sind richtig eingestellt.

Nun, welcher Prozess auch immer Sie hinzufügen, zu dem Sie hinzufügen cpulimit CGroup verwendet 1/10th (100000/1000000 = 1/10 = 0.1 = 10%) der gesamten CPU -Zyklen.

Um die CPU eines Prozesses zu begrenzen, starten Sie das Programm oder den Befehl mit cgexec folgendermaßen:

$ sudo cgexec -g cpu: cpulimit your_command

NOTIZ: Hier, Your_command Kann alle gültigen Linux -Befehle sein.

Um zu beweisen, dass es tatsächlich funktioniert, werde ich zuerst den folgenden Befehl ohne CGroups und dann mit CGroups ausführen und Ihnen die Ergebnisse zeigen.

$ dd if =/dev/null von = out bs = 1m

Wie Sie sehen können, verwendet der Befehl ohne CGroups 90% der gesamten CPU.

Dann habe ich den gleichen Befehl mit CGroups wie folgt ausgeführt:

$ sudo cgexec -g cpu: cpulimit dd if =/dev/null von = out bs = 1m

Wie Sie sehen können, beträgt die CPU -Verwendung maximal 10%. Der Prozess verwendet nicht mehr als das.

So verwenden Sie CGroups, um die CPU -Verwendung eines Prozesses unter Linux zu begrenzen. Danke, dass du diesen Artikel gelesen hast.

Verweise:

[1] https: // zugreifen.roter Hut.com/documentation/en-us/red_hat_enterprise_linux/6/html/ressourcen_management_guide/sec-cpu

[2] https: // linux.sterben.net/mann/1/schön

[3] https: // linux.sterben.Netz/Mann/8/Renice