GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So begrenzen Sie die CPU-Auslastung eines Prozesses in Linux

Manchmal kann ein bestimmter Prozess mehr CPU-Auslastung verbrauchen und die Leistung des gesamten Systems beeinträchtigen. Da dieser bestimmte Prozess mehr CPU verbraucht, können Sie keine anderen Aufgaben ausführen. Sie müssen warten, bis dieser Vorgang abgeschlossen ist, bevor Sie eine neue Aufgabe starten. Glücklicherweise kann dies jetzt durch ein nützliches Dienstprogramm namens CPULimit gelöst werden . Wie der Name schon sagt, begrenzt CPULimit die CPU-Auslastung eines Prozesses. Dies ist sehr nützlich, um die Batch-Jobs zu steuern, wenn Sie nicht möchten, dass sie mehr CPU-Auslastung verbrauchen. Das Hauptziel von CPULimit besteht darin, zu verhindern, dass ein Prozess länger als ein angegebenes Zeitverhältnis ausgeführt wird. Es ändert nichts am Netten Wert oder andere Scheduling-Prioritätseinstellungen, sondern die tatsächliche CPU-Auslastung. Außerdem ist es in der Lage, sich dynamisch und schnell an die Gesamtsystemlast anzupassen. Es funktioniert auf den meisten Unix-ähnlichen Distributionen. In dieser kurzen Anleitung werden wir sehen, wie man die CPU-Auslastung eines Prozesses unter Linux begrenzt.

Installieren Sie CPULimit

CPULimit ist in den Standard-Repositories der meisten Unix-ähnlichen Distributionen verfügbar. Sie können es mit den Standardpaketmanagern in der jeweiligen Linux-Distribution installieren, wie unten gezeigt.

Auf Arch Linux und seinen Derivaten:

$ sudo pacman -S cpulimit

Auf Debian, Ubuntu, Linux Mint:

$ sudo apt-get install cpulimit

Auf RHEL, CentOS, Fedora:

Aktivieren Sie zuerst das EPEL-Repository.

$ sudo yum install epel-release

Installieren Sie dann cpuclimit mit dem Befehl:

$ sudo yum install cpulimit

Oder,

$ sudo dnf install cpulimit

Auf SUSE/openSUSE:

$ sudo zypper install cpulimit

CPU-Nutzung eines Prozesses in Linux mit CPULimit begrenzen

Lassen Sie uns ein Programm ausführen, das mehr CPU-Auslastung verbraucht. Die folgenden Befehle sollten als Root-Benutzer ausgeführt werden.

Erstellen Sie eine Datei namens highcpu.sh .

$ vi highcpu.sh

Fügen Sie den folgenden Inhalt hinzu.

#!/bin/bash
while :; do :; done;

Drücken Sie die ESC-Taste und geben Sie :wq ein um die Datei zu speichern und zu schließen. Dieses kurze Programm wird endlos wiederholt und verbraucht die maximale CPU-Auslastung. Daher empfehle ich Ihnen, es in einer virtuellen Maschine zu testen.

Machen Sie diese Datei ausführbar:

$ chmod +x highcpu.sh

Führen Sie dann den Prozess im Hintergrund mit dem Befehl:

aus
$ ./highcpu.sh &

Beispielausgabe:

[1] 2331

Hier 2331 ist die PID des obigen Prozesses.

Verwenden Sie den Befehl "top", um anzuzeigen, wie viel CPU verbraucht wird.

$ top

Beispielausgabe:

top - 17:16:34 up 10 min, 2 users, load average: 1.12, 0.53, 0.26
Tasks: 87 total, 4 running, 83 sleeping, 0 stopped, 0 zombie
%Cpu(s): 91.9 us, 2.7 sy, 5.4 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 630108 total, 274868 free, 85904 used, 269336 buff/cache
KiB Swap: 1343484 total, 1343484 free, 0 used. 428172 avail Mem

 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
 2331 root 20 0 113120 1184 1004 R 97.7 0.2 2:40.91 highcpu.sh 
 2412 root 39 19 244516 11020 4496 R 1.3 1.7 0:00.11 dnf 
 10 root 20 0 0 0 0 S 0.3 0.0 0:00.68 rcu_sched 
 1 root 20 0 43900 6480 3900 S 0.0 1.0 0:01.61 systemd 
 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 
 3 root 20 0 0 0 0 S 0.0 0.0 0:00.06 ksoftirqd/0 
 6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u2:0 
 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 
 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 
 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0 
 11 root 20 0 0 0 0 R 0.0 0.0 0:00.38 rcuos/0 
 12 root rt 0 0 0 0 S 0.0 0.0 0:00.02 watchdog/0 
 13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 
 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 
 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 
 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf 
 17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeb

Wie Sie in der obigen Ausgabe sehen, verbraucht der Prozess highcpu.sh mehr als 97 % der CPU-Auslastung. Da es mehr CPU-Auslastung verbraucht, ist es ziemlich schwierig, andere Aufgaben auszuführen. Nach einigen Minuten hängt sich Ihr System möglicherweise auf oder friert ein. Hier kommt CPULimt ins Spiel.

Lassen Sie uns nun die CPU-Auslastung dieses Prozesses mit dem CPULimit-Tool begrenzen. Angenommen, wir begrenzen diesen Prozess per PID auf 30 % CPU.

Führen Sie dazu Folgendes aus:

$ cpulimit -l 30 -p 2331 &

Hier,

  • "-l 30" Flag begrenzt den Prozess auf 30 %.
  • "-p 2331" ist die PID von highcpu.sh

Lassen Sie uns nun erneut die CPU-Auslastung des obigen Prozesses mit dem Befehl:

überprüfen
$ top

Beispielausgabe:

top - 17:29:16 up 5 min, 1 user, load average: 0.61, 0.57, 0.27
Tasks: 86 total, 2 running, 83 sleeping, 1 stopped, 0 zombie
%Cpu(s): 7.2 us, 0.0 sy, 0.0 ni, 92.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 630108 total, 435348 free, 78052 used, 116708 buff/cache
KiB Swap: 1343484 total, 1343484 free, 0 used. 442040 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
 2331 root 20 0 113120 1180 1004 T 29.7 0.2 3:36.97 highcpu.sh 
 2334 root 9 -11 4324 692 572 S 1.7 0.1 0:00.47 cpulimit 
 1 root 20 0 43900 6480 3900 S 0.3 1.0 0:01.65 systemd 
 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 
 3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0 
 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 
 6 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kworker/u2:0 
 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 
 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 
 9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0 
 10 root 20 0 0 0 0 S 0.0 0.0 0:00.44 rcu_sched 
 11 root 20 0 0 0 0 R 0.0 0.0 0:00.37 rcuos/0 
 12 root rt 0 0 0 0 S 0.0 0.0 0:00.05 watchdog/0 
 13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper 
 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 
 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 
 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 perf

Wie Sie in der obigen Ausgabe sehen, wurde die CPU-Auslastung von highcpu.sh auf 29,7 % gesenkt , was sehr nahe an 30% liegt. Jetzt können Sie mehr CPU-Ressourcen haben, um andere Prozesse frei auszuführen.

Wir haben gesehen, wie man einen Prozess per PID einschränkt. Alternativ können wir den obigen Befehl ausführen, indem wir den Namen der ausführbaren Programmdatei angeben.

Der obige Befehl wäre beispielsweise:

$ cpulimit -l 30 ./highcpu.sh &

Ebenso können Sie beliebig viele Prozesse im Hintergrund starten und deren CPU-Auslastung nach Belieben begrenzen.

Die im Hintergrund laufenden Prozesse können Sie jederzeit mit "fg" in den Vordergrund holen Befehl:

$ fg

Beispielausgabe:

cpulimit -l 30 -p 2331

Schlussfolgerung

CPULimit kann nützlich sein, wenn Sie einen Prozess ausführen, der mehr CPU-Auslastung verbraucht. Nächstes Mal Wenn Sie bemerken, dass ein Programm mehr CPU-Auslastung verbraucht, finden Sie einfach die PID des Prozesses mit dem Befehl „top“ und begrenzen Sie seine CPU-Auslastung mit dem Befehl CPULimit wie oben beschrieben auf einen Mindestwert. Sie können diese Anwendung auch verwenden, um zu testen, wie eine Anwendung bei geringer CPU-Auslastung funktioniert.


Linux
  1. So beenden Sie einen Zombie-Prozess unter Linux

  2. Linux – Speichernutzung für einen einzelnen Linux-Prozess begrenzen?

  3. Linux – Wie beschränke ich einen Prozess auf einen CPU-Kern in Linux??

  4. CPU-Auslastung und Speicherauslastung eines einzelnen Prozesses unter Linux abrufen?

  5. So erhalten Sie die CPU-Auslastung

So beenden Sie einen Prozess in Linux

So begrenzen Sie die CPU-Auslastung mit CPULimit unter Ubuntu Linux

So erhalten Sie die CPU-Auslastung eines einzelnen Prozesses in Linux

So überprüfen Sie die Linux-CPU-Auslastung oder -Auslastung

Wie kann die Speichernutzung nach Anwendung in Linux begrenzt werden?

Linux-CPU-Auslastung und Verlauf der Prozessausführung