Получение загрузки процессора в реальном времени

Когда я выполняю следующую команду, чтобы получить использование процессора, я получаю хорошее + пользовательское использование процессора.

top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' 

Вывод:

14.5

Здесь возникает проблема, заключающаяся в том, что вывод зависит от верхней команды, поэтому он не изменяется мгновенно как верхняя команда. Поэтому я не получаю правильный процессор мгновенно. Это дает тот же результат и не меняется.

Я хочу получить информацию об использовании процессора в режиме реального времени. Пожалуйста, помогите мне улучшить мою команду.

13
задан 7 October 2013 в 06:07

6 ответов

Если вы можете позволить себе задержку в одну секунду, это отобразит использование ЦП в виде простого процента:

echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]

(Без задержки в одну секунду, vmstat может печатать только средние значения с момента загрузки.)

23
ответ дан 7 October 2013 в 06:07

Используйте -n2 . Это выведет две строки. Первый раз top печатает, что строка не соответствует состоянию на данный момент. Затем настройте свой сценарий так, чтобы первая строка игнорировалась.

0
ответ дан 7 October 2013 в 06:07

Я пробовал несколько способов, но это кажется мне наиболее точным:

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'

Получил из здесь

7
ответ дан 7 October 2013 в 06:07

Это известная проблема с top. Как объяснялось в here, 1-я итерация top -b возвращает проценты с момента загрузки, поэтому нам нужно как минимум две итерации (-n 2), чтобы получить текущий процент. Для ускорения можно установить эластичность dмежду итерациями на 0.01. top разделяет использование процессора между пользовательскими, системными процессами и симпатичными процессами, нам нужна сумма трех. Наконец, вы grep строку, содержащую процентное соотношение процессоров, а затем используете gawk для суммирования пользовательских, системных и приятных процессов:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode
10
ответ дан 7 October 2013 в 06:07

Мне нужно было использовать процессор для каждого ядра, и я использовал mpstat из пакета sysstat.

sudo apt install sysstat

Использование CPU0 в%:

echo 100 - $(mpstat -P 0 | tail -1 | awk '{print $13}') | bc

Использование CPU1 в%:

echo 100 - $(mpstat -P 1 | tail -1 | awk '{print $13}') | bc

Измените -PX, если у вас есть более двух ядер.

1
ответ дан 5 January 2021 в 23:26

С очень небольшой задержкой (примерно 500 мс) текущее использование ЦП в% можно узнать с помощью следующей команды

awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) "%"; }' <(grep 'cpu ' /proc/stat) <(sleep 0.5;grep 'cpu ' /proc/stat)
0
ответ дан 5 January 2021 в 23:26

Другие вопросы по тегам:

Похожие вопросы: