A volte, un particolare processo potrebbe consumare più CPU e influire sulle prestazioni dell'intero sistema. Poiché quel particolare processo consuma più CPU, non è possibile eseguire altre attività. Devi aspettare che il processo finisca prima di iniziare una nuova attività. Fortunatamente, ora questo può essere risolto da un'utile utility chiamata CPULimit . Come suggerisce il nome, CPULimit limita l'utilizzo della CPU di un processo. Questo è abbastanza utile per controllare i lavori batch, quando non si desidera che utilizzino più CPU. L'obiettivo principale di CPULimit è impedire l'esecuzione di un processo per più di un rapporto di tempo specificato. Non cambia il bello 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 rapido. Funzionerà sulla maggior parte delle distribuzioni simili a Unix. In questa breve guida, vedremo come limitare l'utilizzo della CPU di un processo in Linux.
Installa Limite CPU
CPULimit è disponibile sulla maggior parte dei repository predefiniti della distribuzione simile a Unix. Puoi installarlo utilizzando i gestori di pacchetti predefiniti nella rispettiva distribuzione Linux come mostrato di seguito.
Su Arch Linux e i suoi derivati:
$ sudo pacman -S cpulimit
Su Debian, Ubuntu, Linux Mint:
$ sudo apt-get install cpulimit
Su RHEL, CentOS, Fedora:
Abilita prima il repository EPEL.
$ sudo yum install epel-release
E poi, installa cpuclimit usando il comando:
$ sudo yum install cpulimit
Oppure,
$ sudo dnf install cpulimit
Su SUSE/openSUSE:
$ sudo zypper install cpulimit
Limitare l'utilizzo della CPU di un processo in Linux utilizzando CPULimit
Eseguiamo un programma che consuma più CPU. I seguenti comandi dovrebbero essere eseguiti come utente root.
Crea un file chiamato highcpu.sh .
$ vi highcpu.sh
Aggiungi i seguenti contenuti.
#!/bin/bash while :; do :; done;
Premi il tasto ESC e digita :wq per salvare e chiudere il file. Questo breve programma andrà in loop all'infinito e consuma il massimo utilizzo della CPU. Quindi, ti consiglio di testarlo su una macchina virtuale.
Rendi questo file eseguibile:
$ chmod +x highcpu.sh
Quindi, esegui il processo in background usando il comando:
$ ./highcpu.sh &
Risultato di esempio:
[1] 2331
Qui 2331 è il PID del processo di cui sopra.
Per vedere quanta CPU consuma, usa il comando "top".
$ top
Risultato di esempio:
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
Come puoi vedere nell'output sopra, il processo highcpu.sh consuma più del 97% di utilizzo della CPU. Poiché ha consumato più CPU, è abbastanza difficile eseguire altre attività. Dopo alcuni minuti, il sistema potrebbe bloccarsi o bloccarsi. È qui che CPULimt viene in aiuto.
Ora limitiamo l'utilizzo della CPU di questo processo utilizzando lo strumento CPULimit. Supponiamo, ad esempio, di limitare questo processo tramite PID al 30% della CPU.
Per farlo, esegui:
$ cpulimit -l 30 -p 2331 &
Ecco,
- "-l 30" flag limita il processo al 30%.
- "-p 2331" è il PID di highcpu.sh
Ora, controlliamo di nuovo l'utilizzo della CPU del processo sopra utilizzando il comando:
$ top
Risultato di esempio:
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
Come puoi vedere nell'output sopra, l'utilizzo della CPU di highcpu.sh è stato ridotto al 29,7% , che è molto vicino al 30%. Ora puoi avere più risorse della CPU per eseguire altri processi liberamente.
Abbiamo visto come limitare un processo tramite PID. In alternativa, possiamo eseguire il comando precedente specificando il nome del file di programma eseguibile.
Ad esempio, il comando precedente sarebbe:
$ cpulimit -l 30 ./highcpu.sh &
Allo stesso modo, puoi avviare un numero qualsiasi di processi in background e limitare il loro utilizzo della CPU come desideri.
Puoi portare in primo piano i processi in esecuzione in background in qualsiasi momento utilizzando "fg" comando:
$ fg
Risultato di esempio:
cpulimit -l 30 -p 2331
Conclusione
CPULimit può essere utile durante l'esecuzione di un processo che consuma più CPU. La prossima volta Se noti che un programma consuma più CPU, trova il PID del processo usando il comando "top" e limita l'utilizzo della CPU a un valore minimo usando il comando CPULimit come descritto sopra. Puoi anche utilizzare questa applicazione per testare le prestazioni di un'applicazione con un utilizzo ridotto della CPU.