GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere la percentuale di utilizzo del processore con bash?

L'uso o l'utilizzo del processore è una misura nel tempo. Un modo per misurare l'utilizzo in % avviene per calcolo su due letture successive di /proc/stat . Un semplice script bash comune per calcolare la percentuale è:

#!/bin/bash

# Read /proc/stat file (for first datapoint)
read cpu user nice system idle iowait irq softirq steal guest< /proc/stat

# compute active and total utilizations
cpu_active_prev=$((user+system+nice+softirq+steal))
cpu_total_prev=$((user+system+nice+softirq+steal+idle+iowait))

usleep 50000

# Read /proc/stat file (for second datapoint)
read cpu user nice system idle iowait irq softirq steal guest< /proc/stat

# compute active and total utilizations
cpu_active_cur=$((user+system+nice+softirq+steal))
cpu_total_cur=$((user+system+nice+softirq+steal+idle+iowait))

# compute CPU utilization (%)
cpu_util=$((100*( cpu_active_cur-cpu_active_prev ) / (cpu_total_cur-cpu_total_prev) ))

printf " Current CPU Utilization : %s\n" "$cpu_util"

exit 0

uso/output:

$ bash procstat-cpu.sh
 Current CPU Utilization : 10

output su 5 iterazioni:

$ ( declare -i cnt=0; while [ "$cnt" -lt 5 ]; do bash procstat-cpu.sh; ((cnt++)); done )
 Current CPU Utilization : 20
 Current CPU Utilization : 18
 Current CPU Utilization : 18
 Current CPU Utilization : 18
 Current CPU Utilization : 18

top -bn1 | sed -n '/Cpu/p'

fornisce la riga seguente

Cpu(s): 15.4%us,  5.3%sy,  0.0%ni, 78.6%id,  0.5%wa,  0.0%hi,  0.1%si,  0.0%st

Puoi estrarre qualsiasi campo CPU con quanto segue prenderà l'utente CPU (noi)

top -bn1 | sed -n '/Cpu/p' | awk '{print $2}' | sed 's/..,//'

Uscita:

15.4%

Se vuoi un altro campo come system CPU (sy) puoi cambiare il campo awk da $2,

top -bn1 | sed -n '/Cpu/p' | awk '{print $3}' | sed 's/..,//'

Uscita:

5.3%

Se vuoi un'altra CPU:

us:     user    CPU used by user processes
sy:     system  CPU used by system/kernel processes
ni:     nice    CPU used by processes that were reniced
id:     idle    CPU not used
wa:     io wait     Essentially idle CPU waiting on IO devices
hi:     hardware irq    CPU used to service hardware IRQs
si:     software irq    CPU used to service soft IRQs
st:     steal time  CPU time which the hypervisor dedicated (or ‘stole’) for other guests in the system.

Per ottenere la percentuale di utilizzo totale dall'attivazione del sistema:

awk '/cpu /{print 100*($2+$4)/($2+$4+$5)}' /proc/stat

Per ottenere la percentuale di utilizzo nell'ultimo secondo:

awk -v a="$(awk '/cpu /{print $2+$4,$2+$4+$5}' /proc/stat; sleep 1)" '/cpu /{split(a,b," "); print 100*($2+$4-b[1])/($2+$4+$5-b[2])}'  /proc/stat

Spiegazione

Da man 5 proc , il significato dei primi quattro numeri sulla riga cpu in /proc/stat è dato da:

cpu 3357 0 4313 1362393
La quantità di tempo, misurata in unità di USER_HZ (1/100 di secondo sulla maggior parte delle architetture, utilizzare sysconf(_SC_CLK_TCK) per ottenere il valore corretto), che il sistema ha trascorso in modalità utente, modalità utente con priorità bassa (nice), sistema rispettivamente la modalità e l'attività inattiva. L'ultimo valore dovrebbe essere USER_HZ moltiplicato per la seconda voce nello pseudo-file uptime.

Per ottenere l'utilizzo della CPU, aggiungiamo i tempi dell'utente e del sistema e li dividiamo per il totale dei tempi di utente, sistema e inattività.

Diamo un'altra occhiata al calcolo dell'utilizzo totale della CPU dall'avvio del sistema:

awk '/cpu /{print 100*($2+$4)/($2+$4+$5)}' /proc/stat

Richiedendo che la riga corrisponda a cpu , otteniamo i totali di sistema. La seconda colonna è l'ora dell'utente, la quarta è l'ora del sistema e la quinta è l'ora di inattività. Il rapporto viene moltiplicato per 100 per ottenere una percentuale.

Consideriamo ora il recente utilizzo della CPU:

 awk -v a="$(awk '/cpu /{print $2+$4,$2+$4+$5}' /proc/stat; sleep 1)" '/cpu /{split(a,b," "); print 100*($2+$4-b[1])/($2+$4+$5-b[2])}'  /proc/stat

Questo legge /proc/cpu due volte, a distanza di un secondo. La prima volta, i tempi CPU utente + sistema e utente + sistema + inattività vengono salvati nella variabile a . sleep è chiamato a ritardare per un secondo. Quindi, /proc/cpu viene letto una seconda volta. Il vecchio totale utente+sistema viene sottratto dal nuovo totale e diviso per la variazione del totale di tutti i tempi. Il risultato viene moltiplicato per 100 per convertirlo in percentuale e stampato.


Linux
  1. Come uso Vagrant con libvirt

  2. Come utilizzare il comando di arresto e riavvio di Linux con esempi

  3. Come posso usare i comandi con alias con xargs?

  4. Come creare un picco della CPU con un comando bash

  5. Come posso usare rsync con un file system FAT?

Come donare risorse CPU/GPU alla scienza con Boinc

Come creare documenti con gli script Bash

Come usare systemctl in Linux

Come usare il comando Linux Strace

Come utilizzare il comando fd sul sistema Linux

Come iniziare con Arch Linux