Tentando Obter o Uso Total da CPU na Bash

2

Estou tentando obter a carga total da CPU com isso:

IDLE=$(mpstat | grep "all" | cut -c 92-)

CPULD=$(expr 100 - $IDLE)

echo $CPULD

mas sempre retorna:

expr: non-integer argument on the second line. 

Eu olhei em volta e todo mundo diz que números inteiros serão automaticamente reconhecidos em strings, mas não parece estar funcionando.

EDIT: Para aqueles de vocês que desejam ver o meu script completo e agora em funcionamento, ele está aqui: link

    
por Ben 03.09.2015 / 01:39

3 respostas

3

bash (e expr ) não podem fazer aritmética de ponto flutuante, você precisa da ajuda de bc .

Por exemplo:

$ IDLE=$(mpstat | grep "all" | cut -c 92-)

Digamos que $IDLE seja 77,25.

Agora você precisa de bc :

$ IDLE=77.25

$ CPULD="$(bc <<<"100 - $IDLE")"

$ echo "$CPULD"
22.75

bc opera em arquivos, então podemos passar a string de manipulação via STDIN, embora eu prefira aqui strings:

$ echo "100 - 45.34" | bc
54.66

$ bc <<<"100 - 45.34"
54.66

Em uma nota diferente, para obter o% IDLE da CPU, em vez de mpstat | grep "all" | cut -c 92- , você pode fazer:

mpstat | grep -Po 'all.* \K[^ ]+$'
    
por heemayl 03.09.2015 / 02:23
0

Eu criei esta solução e funciona para mim.

echo print 'top -n 1 | tr -s " " | cut -d$" " -f10 | tail -n +8 | head -n -1 | paste -sd+ | bc'/ 'nproc' | python

Fonte (write up): link

    
por Mohammad 27.11.2015 / 23:39
0

Use o comando uptime . Ele fornece as médias de carga do sistema nos últimos 1, 5 e 15 minutos ( página do manual ).

# 1. get total average CPU usage for the past minute
avg_cpu_use=$(uptime)
# 2. split response
IFS=',' read -ra avg_cpu_use_arr <<< "$avg_cpu_use"
# 3. find cpu usage
avg_cpu_use=""
for i in "${avg_cpu_use_arr[@]}"; do :
    if [[ $i == *"load average"* ]]; then
        avg_cpu_use=$i
        break       
    fi
done
# 4. create response
avg_cpu_use=$(echo ${avg_cpu_use:16})   # Remove "  load average: "
if [[ -z "${avg_cpu_use// }" ]]; then
    avg_cpu_use="CPU: N/A perc used"
    exit -1
else
    avg_cpu_use="CPU: ${avg_cpu_use} perc used"
fi
    
por xinthose 07.09.2017 / 17:43