GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir le pourcentage d'utilisation du processeur avec bash ?

L'utilisation ou l'utilisation du processeur est une mesure dans le temps. Une façon de mesurer l'utilisation dans % est par calcul sur deux lectures successives de /proc/stat . Un simple script bash commun pour calculer le pourcentage est :

#!/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

utilisation/sortie :

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

sortie sur 5 itérations :

$ ( 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'

donne la ligne suivante

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

Vous pouvez extraire n'importe quel champ CPU avec ce qui suit prendra l'utilisateur CPU (nous)

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

Sortie :

15.4%

Si vous voulez un autre champ comme système CPU (sy) vous pouvez changer le champ awk de $2,

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

Sortie :

5.3%

Si vous voulez un autre 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.

Pour obtenir le pourcentage total d'utilisation depuis la mise en service du système :

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

Pour obtenir le pourcentage d'utilisation sur la dernière seconde :

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

Explication

À partir de man 5 proc , la signification des quatre premiers chiffres de la ligne cpu dans /proc/stat est donné par :

processeur 3357 0 4313 1362393
Le temps, mesuré en unités de USER_HZ (1/100e de seconde sur la plupart des architectures, utilisez sysconf(_SC_CLK_TCK) pour obtenir la bonne valeur), que le système a passé en mode utilisateur, mode utilisateur avec une faible priorité (sympa), système mode et la tâche inactive, respectivement. La dernière valeur doit être USER_HZ fois la deuxième entrée dans le pseudo-fichier uptime.

Pour obtenir l'utilisation du processeur, nous ajoutons les temps utilisateur et système et divisons par le total des temps utilisateur, système et inactif.

Examinons à nouveau le calcul de l'utilisation totale du processeur depuis la mise en place du système :

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

En exigeant que la ligne corresponde à cpu , nous obtenons les totaux du système. La deuxième colonne est le temps de l'utilisateur, la quatrième est le temps système et la cinquième est le temps d'inactivité. Le rapport est multiplié par 100 pour obtenir un pourcentage.

Considérons maintenant l'utilisation récente du processeur :

 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

Cela lit /proc/cpu deux fois, à une seconde d'intervalle. La première fois, les temps CPU utilisateur + système et utilisateur + système + inactif sont enregistrés dans la variable a . sleep est appelé à retarder d'une seconde. Ensuite, /proc/cpu est lu une seconde fois. L'ancien total utilisateur + système est soustrait du nouveau total et divisé par la modification du total de tous les temps. Le résultat est multiplié par 100 pour le convertir en pourcentage et imprimé.


Linux
  1. Comment j'utilise Vagrant avec libvirt

  2. Comment utiliser les commandes d'historique de Bash

  3. Comment utiliser Ansible pour configurer la surveillance du système avec Prometheus

  4. Comment puis-je utiliser des commandes aliasées avec xargs ?

  5. Comment créer un pic CPU avec une commande bash

Comment donner des ressources CPU/GPU à la science avec Boinc

Comment créer des documents avec des scripts Bash

Comment utiliser systemctl sous Linux

Comment utiliser la commande Linux Strace

Comment utiliser la commande fd sur le système Linux

Comment démarrer avec Arch Linux