Когда я выполняю следующую команду, чтобы получить использование процессора, я получаю хорошее + пользовательское использование процессора.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
Вывод:
14.5
Здесь возникает проблема, заключающаяся в том, что вывод зависит от верхней команды, поэтому он не изменяется мгновенно как верхняя команда. Поэтому я не получаю правильный процессор мгновенно. Это дает тот же результат и не меняется.
Я хочу получить информацию об использовании процессора в режиме реального времени. Пожалуйста, помогите мне улучшить мою команду.
Если вы можете позволить себе задержку в одну секунду, это отобразит использование ЦП в виде простого процента:
echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
(Без задержки в одну секунду, vmstat
может печатать только средние значения с момента загрузки.)
Используйте -n2
. Это выведет две строки. Первый раз top
печатает, что строка не соответствует состоянию на данный момент. Затем настройте свой сценарий так, чтобы первая строка игнорировалась.
Я пробовал несколько способов, но это кажется мне наиболее точным:
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)}'
Получил из здесь
Это известная проблема с 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
Мне нужно было использовать процессор для каждого ядра, и я использовал 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, если у вас есть более двух ядер.
С очень небольшой задержкой (примерно 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)