Questo tutorial descrive come limitare l'utilizzo della CPU in Ubuntu 18.04. Userò l'utilità cpulimit per questo scopo. Cpulimit è uno strumento che limita l'utilizzo della CPU di un processo (espresso in percentuale, non in tempo di CPU). È utile controllare i lavori batch quando non si desidera che consumino troppi cicli della CPU. L'obiettivo di cpulimit è impedire l'esecuzione di un processo per più di un rapporto di tempo specificato. Non cambia il bel valore o altre impostazioni di priorità di pianificazione, ma l'utilizzo reale della CPU. Inoltre, è in grado di adattarsi al carico complessivo del sistema, in modo dinamico e veloce.
Il controllo della quantità di CPU utilizzata viene eseguito inviando segnali SIGSTOP e SIGCONT POSIX ai processi. Tutti i processi figli e i thread del processo specificato condivideranno la stessa percentuale di CPU.
1 Nota preliminare
Questo tutorial è basato sul server Ubuntu 18.04 LTS (Bionic Beaver), quindi dovresti configurare un'installazione del server Ubuntu 18.04 di base prima di continuare con questo tutorial. Il sistema dovrebbe avere un indirizzo IP statico. Uso 192.168.1.100 come indirizzo IP in questo tutorial e server1.example.com come nome host.
2 Installazione CPULimit
Per prima cosa dobbiamo installare cpulimit come segue:
apt-get update
apt-get install cpulimit
3 Limitazione dell'utilizzo della CPU
Ora verificheremo l'utilità per limitare l'utilizzo della CPU. Per questo, verificheremo prima l'utilizzo della CPU senza cpulimit e poi implementeremo cpulimit per valutare lo stesso. Mettiamolo in chiaro con l'esempio.
- Ecco un esempio di come utilizzare la CPU con un'applicazione in CPU single core:
dd if=/dev/zero of=/dev/null &
Quindi verificheremo l'utilizzo della CPU con il comando:
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
Come possiamo vedere che l'utilizzo della CPU è andato al 100%, ora utilizzeremo cpulimit per limitare l'utilizzo della CPU. Possiamo portare questo processo in primo piano usando fg comando e cancellalo con CTRL+C
fg
Ora possiamo testare cpulimit per vedere se fa effettivamente quello che dovrebbe. Testiamolo come segue:
cpulimit -l 30 dd if=/dev/zero of=/dev/null &[email protetta]:~# cpulimit -l 30 dd if=/dev/zero of=/dev/null &
[1] 1852
[email protetta]:~# Processo 1853 rilevato
[1]+ Fatto cpulimit -l 30 dd if=/dev/zero of=/dev/null
[email protected]:~#
Ora verificheremo l'utilizzo della CPU con il comando in alto:
toptop - 11:30:54 su 55 min, 1 utente, media di caricamento:0,20, 0,58, 1,34
Attività:250 in totale, 2 in esecuzione, 247 inattiva, 1 fermo, 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 total, 271944 used, 738596 free, 21816 buffers
KiB Swap:1048572 totale, 0 usato, 1048572 gratuito. 158212 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1853 root 20 0 724">=" stile:<5; /forte> 0.1 0:35.53 dd
1 root 20 0 33480 2776 1456 S 0.0 0.3 0:05.37 INIT
2 radice 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0ndo la radice 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0ndo 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0
4 radice 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
Ora puoi vedere che l'utilizzo della CPU è diminuito dal 100% al 33,8% di quasi il 30%. Quindi abbiamo verificato con successo l'utilità cpulimit che è in grado di limitare l'utilizzo del consumo di CPU in una distribuzione Ubuntu single core.
- Ecco un esempio di come utilizzare la CPU con un'applicazione in CPU multicore:
Per controllare il core della tua CPU usa il comando:
nproc
Nel mio caso, il numero di core della CPU era 4.
Ora procederemo a controllare l'utilizzo della CPU senza cpulimit in tutti e 4 i core per l'applicazione come segue:
for j in `seq 1 4`; do dd if=/dev/zero of=/dev/null & done
Eseguirà il comando utilizzando tutti i core e produrrà l'output come:
[1] 1263
[2] 1264
[3] 1265
[4] 1266
[email protetta]:~#
Ora controlla l'utilizzo della CPU con il comando in alto:
toptop - 11:47:45 su 4 min, 1 utente, media di caricamento:3,63, 1,53, 0,57
Attività:290 in totale, 5 in esecuzione, 285 inattiva, 0 fermo, 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 total, 209712 used, 800828 free, 20276 buffers
KiB Swap: 1048572 total, 0 used, 2 free. 93632 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1263 root 20 0 724 610 ; /forte> 0.1 2:21.40 gg
1264 radice 20 0 7224 616 520 R 100.0 0.1 2:21.41 gg
1265 radice 20 0 7224 612 520 R 99.0 0.1 2:21.03 gg
1266 radice 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 Root 20 0 104556 4008 2924 S 0,7 0,4 0:00,08 sshd
Il comando dd consuma quasi il 100% della CPU di tutti i core. Successivamente, verificheremo il comando con l'utilità cpulimit. Per questo uccidere le tracce precedenti per il comando dd come segue:
killall dd[email protected]:~# killall dd
[1] Terminato dd if=/dev/zero of=/dev/null
[3]- Terminato dd if=/dev/zero of=/dev /null
[2]- Terminato dd if=/dev/zero of=/dev/null
[4]+ Terminato dd if=/dev/zero of=/dev/null
[email protetta]:~#
Ora usa cpulimit con lo stesso comando come segue:
for j in `seq 1 4`; do cpulimit -l 20 dd if=/dev/zero of=/dev/null & done[email protetta]:~# per 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 protetta]:~# Processo 1434 rilevato
Processo 1433 rilevato
Processo 1437 rilevato
Processo 1439 rilevato
[1] Fatto cpulimit -l 20 gg if=/dev/zero of=/dev/null
[2] Fatto cpulimit -l 20 gg if=/dev/zero of=/dev/null
[3]- Fatto cpulimit -l 20 dd if=/dev/zero of=/dev/null
[4]+ Fatto cpulimit -l 20 dd if=/dev/zero of=/dev/null
[email protected ]:~#
Ora controlla l'utilizzo della CPU con l'utility cpulimit.
toptop - 11:59:10 su 16 min, 2 utenti, media di caricamento:0,47, 0,71, 0,81
Attività:256 in totale, 2 in esecuzione, 251 inattiva, 3 fermati, 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 total, 204064 used, 806476 free, 20408 buffers
KiB Swap: 1048572 total, 0 used, 2 free. 98340 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1433 root 20 0 7224 610 52 strong> . 0.1 0:12.00 gg
1439 radice 20 0 7224 616 520 R 26.6 0.1 0:12.13 gg
1434 radice 20 0 7224 612 520 T 25.3 0.1 0:11.97 dd
1437 radice 20 0 7224 612 516 T 22.9 0.1 0:11,93 dd
root 20 0 0 0 0 s 0.3 0.0 0:00.22 RCU_Sched
8 root 20 0 0 0 0 S 0.3 0.0 0:00.21 RCUOS /0
Come puoi vedere sopra, l'utilizzo della CPU è limitato dal 100% al 20% quasi per le CPU multiple.
Congratulazioni! Abbiamo testato con successo cpulimit per limitare l'utilizzo della CPU in Ubuntu 18.04 :)
4 link
- Ubuntu:http://www.ubuntu.com/
- cpulimit :https://github.com/opsengine/cpulimit