In dieser Anleitung wird beschrieben, wie Sie die CPU-Auslastung in Ubuntu 18.04 begrenzen. Ich werde zu diesem Zweck das Dienstprogramm cpulimit verwenden. Cpulimit ist ein Tool, das die CPU-Auslastung eines Prozesses begrenzt (ausgedrückt in Prozent, nicht in CPU-Zeit). Es ist nützlich, Batch-Jobs zu steuern, wenn Sie nicht möchten, dass sie zu viele CPU-Zyklen verbrauchen. Das Ziel von cpulimit ist es, zu verhindern, dass ein Prozess länger als ein bestimmtes Zeitverhältnis läuft. Es ändert nicht den 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.
Die Kontrolle der verwendeten CPU-Menge erfolgt durch Senden von SIGSTOP- und SIGCONT-POSIX-Signalen an Prozesse. Alle untergeordneten Prozesse und Threads des angegebenen Prozesses teilen sich den gleichen Prozentsatz der CPU.
1 Vorbemerkung
Dieses Tutorial basiert auf dem Ubuntu 18.04 LTS (Bionic Beaver)-Server, daher sollten Sie eine grundlegende Ubuntu 18.04-Serverinstallation einrichten, bevor Sie mit diesem Tutorial fortfahren. Das System sollte eine statische IP-Adresse haben. Ich verwende 192.168.1.100 als IP-Adresse in diesem Tutorial und server1.example.com als Hostnamen.
2 CPULimit-Installation
Zuerst müssen wir cpulimit wie folgt installieren:
apt-get update
apt-get install cpulimit
3 Begrenzung der CPU-Nutzung
Jetzt überprüfen wir das Dienstprogramm zur Begrenzung der CPU-Auslastung. Dazu werden wir zunächst die CPU-Auslastung ohne cpulimit überprüfen und dann das cpulimit implementieren, um dasselbe auszuwerten. Machen wir es uns anhand des Beispiels klar.
- Hier ist ein Beispiel dafür, wie Sie Ihre CPU mit einer Anwendung in einer Single-Core-CPU nutzen können:
dd if=/dev/zero of=/dev/null &
Dann prüfen wir die CPU-Auslastung mit dem Befehl:
top
top - 11:24:18 up 49 min, 1 user, load average: 0.94, 1.02, 1.79
Tasks: 249 total, 2 running, 247 sleeping, 0 stopped, 0 zombie
%Cpu(s): 13.4 us, 11.6 sy, 0.0 ni, 74.9 id, 0.0 wa, 0.1 hi, 0.0 si, 0.0 st
KiB Mem: 1010540 total, 271652 used, 738888 free, 21760 buffers
KiB Swap: 1048572 total, 0 used, 1048572 free. 158204 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1850 root 20 0 7224 616 520 R 100.0 0.1 1:20.33 dd
1851 root 20 0 24952 1756 1180 R 0.3 0.2 0:00.03 top
1 root 20 0 33480 2776 1456 S 0.0 0.3 0:05.31 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
Da wir sehen können, dass die CPU-Auslastung auf 100 % gestiegen ist, werden wir jetzt cpulimit verwenden, um die CPU-Auslastung zu begrenzen. Wir können diesen Prozess mit fg in den Vordergrund holen Befehl und brechen Sie ihn mit STRG+C
abfg
Jetzt können wir cpulimit testen, um zu sehen, ob es tatsächlich tut, was es soll. Lassen Sie es wie folgt testen:
cpulimit -l 30 dd if=/dev/zero of=/dev/null &[email protected]:~# cpulimit -l 30 dd if=/dev/zero of=/dev/null &
[1] 1852
[email protected]:~# Prozess 1853 erkannt
[1]+ Fertig cpulimit -l 30 dd if=/dev/zero of=/dev/null
[email protected]:~#
Jetzt prüfen wir die CPU-Auslastung mit dem Top-Befehl:
toptop - 11:30:54 up 55 min, 1 user, load average:0,20, 0,58, 1,34
Aufgaben:250 insgesamt, 2 laufen, 247 schlafen, 1 gestoppt, 0 Zombie
%Cpu(s ): 4.5 us, 4.1 sy, 0.0 ni, 91.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 1010540 insgesamt, 271944 verwendet, 738596 kostenlos, 21816 Puffer
KiB Swap 1048572 insgesamt, 0 verwendet, 1048572 kostenlos. 158212 zwischengespeicherter Speicher
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1853 root 20 0 7224 612 /stark> 0,1 0:35,53 dd
1 Root 20 0 33480 2776 1456 S 0.0 0,3 0:05,37 init
2 root 20 0 0 0 0 s 0.0 0,0 0:00,01 kthreadd
3 Root 20 0 0 0 0 0 0 0 0 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
Jetzt können Sie sehen, dass die CPU-Auslastung von 100 % auf 33,8 % um fast 30 % gesunken ist. Daher haben wir das Dienstprogramm cpulimit erfolgreich getestet, das in der Lage ist, die Nutzung des CPU-Verbrauchs in einer Single-Core-Ubuntu-Distribution zu begrenzen.
- Hier ist ein Beispiel dafür, wie Sie Ihre CPU mit einer Anwendung in einer Mehrkern-CPU nutzen können:
Um Ihren CPU-Kern zu überprüfen, verwenden Sie den Befehl:
nproc
In meinem Fall war die Anzahl der CPU-Kerne 4.
Jetzt werden wir die CPU-Auslastung ohne cpulimit in allen 4 Kernen für die Anwendung wie folgt überprüfen:
for j in `seq 1 4`; do dd if=/dev/zero of=/dev/null & done
Es führt den Befehl unter Verwendung aller Kerne aus und ergibt die Ausgabe als:
[1] 1263
[2] 1264
[3] 1265
[4] 1266
[E-Mail geschützt]:~#
Überprüfen Sie nun die CPU-Auslastung mit dem Top-Befehl:
toptop - 11:47:45 up 4 min, 1 user, load average:3,63, 1,53, 0,57
Tasks:290 total, 5 running, 285 sleeping, 0 gestoppt, 0 Zombie
%Cpu0 :48,3 us, 51,3 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,3 hi, 0,0 si, 0,0 st
%Cpu1 :47,8 us, 52,2 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu2 :53,3 us, 46,4 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,3 hi, 0,0 si, 0,0 st
%Cpu3 :52,0 us, 48,0 sy, 0,0 ni, 0,0 id , 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: 1010540 insgesamt, 209712 verwendet, 800828 frei, 20276 Puffer
KiB Swap: 1048572 insgesamt, 0 verwendet, 10,4857 93632 zwischengespeicherter Speicher
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1263 root 20 0 <"0.0 612 520 R ="1:red style ="1 /stark> 0.1 2:21.40 dd
1264 root 20 0 7224 616 520 R 100.0 0.1 2:21.41 dd
1265 root 20 0 7224 612 520 R 99,0 0.1 2:21.03 dd
1266 root 20 0 7224 616 520 R 98,0 0,1 2:20,82 dd
1281 Root 20 0 104416 3992 2920 S 1,0 0,4 0:00,03 SSHD
1283 Root 20 0 104416 3988 2920 S 1,0 0,4 0:00.03 SSHD
1279 Wurzel 20 0 1045566665666566656665665665656565656565656566. 4008 2924 S 0,7 0,4 0:00,08 sshd
Der Befehl dd verbraucht fast 100 % der CPU aller Kerne. Als Nächstes überprüfen wir den Befehl mit dem Dienstprogramm cpulimit. Beenden Sie dazu vorherige Ablaufverfolgungen für den dd-Befehl wie folgt:
killall dd[email protected]:~# killall dd
[1] Beendet dd if=/dev/zero of=/dev/null
[3]- Beendet dd if=/dev/zero of=/dev /null
[2]- Beendet dd if=/dev/zero of=/dev/null
[4]+ Beendet dd if=/dev/zero of=/dev/null
[E-Mail-geschützt]:~#
Verwenden Sie nun cpulimit mit demselben Befehl wie folgt:
for j in `seq 1 4`; do cpulimit -l 20 dd if=/dev/zero of=/dev/null & done[E-Mail-geschützt]:~# für j in „seq 1 4“; do cpulimit -l 20 dd if=/dev/zero of=/dev/null &done
[1] 1429
[2] 1430
[3] 1431
[4 ] 1432
[email protected]:~# Prozess 1434 erkannt
Prozess 1433 erkannt
Prozess 1437 erkannt
Prozess 1439 erkannt
[1] Fertig cpulimit -l 20 dd if=/dev/zero of=/dev/null
[2] Fertig cpulimit -l 20 dd if=/dev/zero of=/dev/null
[3]- Fertig cpulimit -l 20 dd if=/dev/zero of=/dev/null
[4]+ Fertig cpulimit -l 20 dd if=/dev/zero of=/dev/null
[email protected ]:~#
Überprüfen Sie nun die CPU-Auslastung mit dem cpulimit-Dienstprogramm.
toptop - 11:59:10 bis 16 min, 2 Benutzer, Lastdurchschnitt:0,47, 0,71, 0,81
Aufgaben:256 insgesamt, 2 laufen, 251 schlafen, 3 gestoppt, 0 Zombie
%Cpu0 : 2,0 us, 2,0 sy, 0,0 ni, 96,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu1 :26,2 us, 22,8 sy, 0,0 ni, 50,7 id, 0,0 wa, 0,3 hi, 0,0 si 0,0 st
%Cpu2 :14,0 us, 12,3 sy, 0,0 ni, 73,8 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
%Cpu3 :13,3 us, 11,6 sy, 0,0 ni, 75,1 id , 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: 1010540 insgesamt, 204064 verwendet, 806476 frei, 20408 Puffer
KiB Swap: 1048572 insgesamt, 0 verwendet, 10,4857 98340 zwischengespeicherter Speicher
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1433 root 20 0 <2 24 612 520 T. strong>8 0.1 0:12.00 dd
1439 root 20 0 7224 616 520 R 26.6 0.1 0:12.13 dd
1434 root 20 0 7224 612 520 T 25.3 0.1 0:11.97 dd
1437 root 20 0 7224 612 516 T 22.9 0,1 0:11,93 dd
7 root 20 0 0 0 0 s 0.3 0.0 0:00,22 RCU_Sch
8 root 20 0 0 0 0 s 0.3 0.0 0:00,21 RCUOS /0
Wie Sie oben sehen können, ist die CPU-Auslastung bei CPUs mit mehreren Kernen von 100 % auf fast 20 % begrenzt.
Herzlichen Glückwunsch! Wir haben das cpulimit zur Begrenzung der CPU-Auslastung in Ubuntu 18.04 erfolgreich getestet :)
4 Links
- Ubuntu:http://www.ubuntu.com/
- cpulimit :https://github.com/opsengine/cpulimit