GNU/Linux >> Linux Esercitazione >  >> Linux

Come limitare l'utilizzo della CPU di un processo in Linux

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.


Linux
  1. Recuperare l'utilizzo della CPU e l'utilizzo della memoria di un singolo processo su Linux?

  2. Come calcolare l'utilizzo della CPU di un processo tramite PID in Linux da C?

  3. Come ottenere l'utilizzo totale della CPU in Linux usando C++

  4. Limitazione dell'utilizzo della memoria/CPU del processo su Linux

  5. Come trovare quale processo sta causando un elevato utilizzo della CPU

Come uccidere un processo in Linux

Come limitare l'utilizzo della CPU con CPULimit su Ubuntu Linux

Come ottenere l'utilizzo della CPU di un singolo processo in Linux

Linux:come limitare un processo a un core della CPU in Linux??

Come controllare l'utilizzo o l'utilizzo della CPU di Linux

Come limitare l'utilizzo della memoria per applicazione in Linux?