Рассчитать использование ЦП с помощью верхней команды - proUbuntu
0 голосов
/ 04 мая

Мне нужно отображать использование ЦП в моем приложении и обновлять его в реальном времени. Я использую следующую команду, чтобы узнать использование ЦП:

top -b -n 2 | grep Cpu | awk '{printf "CPU Load:%.2f\n", $(NF-13) + $(NF-15)}' | sed -n '2 p'

Вышеупомянутая команда дает мне требуемый результат, но после r иногда она перестает работать, и я не получаю обновленную информацию об использовании ЦП. Любая помощь, почему команда перестает работать после r когда-нибудь.

Ответы [ 2 ]

0 голосов
/ 05 мая

Расчет использования ЦП на основе Linux Загрузка ЦП :

#!/bin/bash

declare -i total idle

# man: proc(5)
# Read first line, skip `cpu', guest, guest_nice.
cpu_usage(){
    local -a a
    local -n b=$1 c=total d=idle
    local    e
    local -i f g

    mapfile -t -s 2 -n 8 -d \  a < /proc/stat
    e=${a[*]}
    ((b=(((f=(g=${e// /+})-c)-(a[3]-d))*1000/f+5)/10))
    c=${g}
    d=${a[3]}
}

# Hide cursor and bring it back on exit.
trap 'tput cnorm' EXIT; tput civis

# An example how you can use cpu_usage
# in a while loop. cpu_usage will use the
# supplied argument as a name reference.
while true; do
    cpu_usage load
    printf \\r%d%%\ \\b $load
    sleep 0.2
done
0 голосов
/ 04 мая

Вы подсчитываете поля в обратном порядке, начиная с последнего, при условии, что число r всегда одно и то же. Однако r это неправда. Один пример, их может быть больше:

doug@s18:~$ top -b -n 2 | grep Cpu
%Cpu(s): 98.9 us,  1.1 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu(s):100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

Обратите внимание, что во 2-й печати есть только 16 полей вместо 17, потому что нормальный интервал между: и первым di git слова «us» загрузка не была занята "1", и поэтому ссылка будет неправильной.

Если смотреть подробнее, я добавлю поле с номером r ниже (помните r , разделителями полей по умолчанию являются пробел и табуляция):

%Cpu(s): 98.9 us,  1.1 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
1        2    3    4   5    6   7    8   9    10  11   12  13   14  15   16  17
.
%Cpu(s):100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
1             2    3   4    5   6    7   8    9   10   11  12   13  14   15  16

Действительно, результат выполнения команды you r иногда дает неверный ответ r (запускается в al oop, где реальный загрузка всегда 100%):

CPU Load: 100.00
CPU Load:   0.00
CPU Load:   0.00
CPU Load: 100.00
CPU Load:   0.00
CPU Load:   0.00

Этот хак, кажется, решает эту проблему:

top -b -n 2 | grep Cpu | sed 's/:/ /g' | awk '{printf "CPU Load:%7.2f\n", $(NF-13) + $(NF-15)}' | sed -n '2 p'

Я не знаю, было ли это у вас r проблема или r нет , нет r, если это единственная проблема.

...