Когда я выполняю следующую команду, чтобы получить использование процессора, я получаю хорошее + пользовательское использование процессора.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
Выход:
14.5
Здесь я получаю проблему, заключающуюся в том, что вывод зависит от команды top, поэтому она не изменяется мгновенно как команда top. Поэтому я не получаю правильный процессор мгновенно. Это дает тот же вывод и не меняется.
Я хочу получить процессор в реальном времени на выходе. Пожалуйста, помогите мне улучшить мою команду.
command-line
cpu
Кетан Патель
источник
источник
time
. В моей системе это занимает всего 0,165 с.time (top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' )
Ответы:
Вы правы,
top
похоже, дает неправильное использование процессора на первой итерации. Вы можете обойти эту проблему следующим образом:Это, конечно, займет вдвое больше времени, но все равно будет работать.
Если вы все еще хотите, чтобы он работал быстрее, вы можете использовать
-d
опцию, например, для 1-секундного общего периода измерения используйте половину из этого:источник
Технически первое
top
не всегда выдает одно и то же значение; он просто выводит среднюю загрузку процессора с момента последней загрузки. Поскольку для вычисления нагрузки на процессорtop
используется дельта/proc/stat
статистики, первое значение вычисляется при сравнении с нулем, что дает неверный (но WAD) результат.Если вы не хотите использовать
top
, вы можете непосредственно разобрать/proc/stat
:Это также быстрее и точнее.
Вы можете проверить это с
stress
:И делать
после.
источник
watch
можно выполнить:watch -n1 "bash ./cpu"
/proc/stat
довольно крутой, но, похоже, он имеет тот же недостаток, что и первая итерация top: он выводит среднюю загрузку процессора с момента последней загрузки, а не текущую.Просто чтобы расширить ответ @ Руслана,
top
распределяющего использование процессора между пользователем, системными процессами иnice
процессами, мы хотим получить сумму из трех. Итак, мы можем работатьtop
вb
режиме atch, который позволяет нам анализировать его вывод. Однако, как объяснено здесь , 1-я итерацияtop -b
возвращает проценты с момента загрузки, поэтому нам нужно как минимум две итерации (-n 2
) для получения текущего процента. Чтобы ускорить процесс, вы можете установить времяd
между итерациями0.01
:источник
Может быть, использовать это на основе
ps
результатов:источник
Используйте команду watch или для цикла в оболочке,
т.е.
watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"
источник
Почему вы заботитесь об использовании процессора? Средняя нагрузка является гораздо лучшим показателем:
Если вам действительно требуется загрузка ЦП,
/proc/stat
возможно, вам нужен синтаксический анализ .источник
/proc/stat
он не дает использования процессора как есть, нужно прочитать его дважды с некоторым временем между чтениями и сделать некоторые вычисления, чтобы получить использование процессора. Это только то, чтоtop
делает.Используя
sar
командуЭто означает: получить результат 10 раз в секунду
источник