GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener el porcentaje de uso del procesador con bash?

El uso o la utilización del procesador es una medida a lo largo del tiempo. Una forma de medir la utilización en % es por cálculo sobre dos lecturas sucesivas de /proc/stat . Un simple script bash común para calcular el porcentaje es:

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

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

resultado de 5 iteraciones:

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

da la siguiente línea

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

Puede extraer cualquier campo de CPU con lo siguiente tomará el usuario CPU (nosotros)

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

Salida:

15.4%

Si desea otro campo como sistema CPU (sy) puede cambiar el campo awk de $2,

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

Salida:

5.3%

Si quieres otra 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.

Para obtener el porcentaje total de uso desde que se puso en marcha el sistema:

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

Para obtener el porcentaje de uso durante el último segundo:

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

Explicación

Desde man 5 proc , el significado de los primeros cuatro números en la línea de cpu en /proc/stat está dado por:

cpu 3357 0 4313 1362393
La cantidad de tiempo, medida en unidades de USER_HZ (1/100 de segundo en la mayoría de las arquitecturas, use sysconf(_SC_CLK_TCK) para obtener el valor correcto), que el sistema pasó en modo de usuario, modo de usuario con prioridad baja (agradable), sistema modo y la tarea inactiva, respectivamente. El último valor debe ser USER_HZ multiplicado por la segunda entrada en el pseudoarchivo de tiempo de actividad.

Para obtener el uso de la CPU, sumamos los tiempos del usuario y del sistema y lo dividimos por el total de tiempo de usuario, sistema e inactividad.

Veamos de nuevo el cálculo del uso total de la CPU desde que el sistema está activo:

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

Al requerir que la línea coincida con cpu , obtenemos los totales del sistema. La segunda columna es el tiempo del usuario, la cuarta es la hora del sistema y la quinta es el tiempo de inactividad. La proporción se multiplica por 100 para obtener un porcentaje.

Ahora, consideremos el uso reciente de la 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

Esto dice /proc/cpu dos veces, con un segundo de diferencia. La primera vez, los tiempos de CPU usuario + sistema y usuario + sistema + inactividad se guardan en la variable a . sleep es llamado a retrasar un segundo. Entonces, /proc/cpu se lee por segunda vez. El antiguo total usuario+sistema se resta del nuevo total y se divide por el cambio en el total de todos los tiempos. El resultado se multiplica por 100 para convertirlo en porcentaje y se imprime.


Linux
  1. Cómo usar los comandos del historial de Bash

  2. Cómo usar Ansible para configurar el monitoreo del sistema con Prometheus

  3. Cómo usar el comando de apagado y reinicio de Linux con ejemplos

  4. ¿Cómo puedo usar comandos con alias con xargs?

  5. ¿Cómo puedo usar rsync con un sistema de archivos FAT?

Cómo donar recursos de CPU/GPU a la ciencia con Boinc

Cómo crear documentos con scripts Bash

Cómo usar systemctl en Linux

Cómo usar el comando Strace de Linux

Cómo usar el comando fd en el sistema Linux

Cómo comenzar con Arch Linux