Как я могу получить топовую статистику процессора из оболочки?

12

Я пытаюсь получить точное чтение моего используемого процессора (в процентах) от top. Это команда, которую я запускаю для тестирования:

top -n1 | awk '/Cpu\(s\):/ {print $2}'

Это возвращает:

10.7%us,

Какая часть данных мне нужна. Тем не менее, каждый раз, когда я запускаю команду, я получаю один и тот же вывод, даже несмотря на то, что я прикладываю разные нагрузки к моей системе (и не говоря уже о htopтом, что мое использование отличается). Кажется, что всякий раз, когда я начинаю top, загрузка моего процессора одинакова. Только после нескольких кадров это дает мне правильные значения.

Не похоже, что я могу анализировать вывод top таким образом, поэтому я ищу другие надежные приложения, которые дадут мне точное чтение из оболочки. Мне действительно нравится, как htopможно дать мне чтение по ядру.

Я попробовал iostatи , mpstatно они , кажется, дают неточные и «медленные изменения» ценности.

n0pe
источник
2
Не. Правильный вопрос: как я могу получить топовую статистику использования процессора из оболочки?
Стефан Гименес
@ StéphaneGimenez спасибо Я изменил свой вопрос
n0pe

Ответы:

12

Я использую этот скрипт (из этой темы на досках Arch ):

#!/bin/bash
read cpu a b c previdle rest < /proc/stat
prevtotal=$((a+b+c+previdle))
sleep 0.5
read cpu a b c idle rest < /proc/stat
total=$((a+b+c+idle))
CPU=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))
jasonwryan
источник
В Linux есть отличная информация в / proc / - все вкусности см. В linux.die.net/man/5/proc . Просто знайте, что это только Linux. На самом деле нет кроссплатформенного способа получить эту информацию, если вы не используете библиотеку, подобную Sigar .
Пэт Нотц
Идея хорошая, но некоторые детали неверны. Значение бездействия - это 5-й столбец, и вы также должны добавить столбец iowait (6-й столбец), чтобы получить разумный процент. Чтобы быть полностью правильным, вам также необходимо добавить все «остальные» значения, но они часто очень малы.
Питер Айзентраут
Значение холостого хода - это пятый столбец, если вы считаете столбец "процессор". В противном случае это четвертый.
SunSparc
6

Проверьте Сар , а также. Реализации могут сильно различаться от nix к nix, но это должно дать вам базовую системную статистику при данных снимках. Я не уверен , насколько точны эти значения в точке , в которой команда первой инициализирован, но вы могли бы играть, чтобы увидеть , как он сравнивает top, iostatи т.д.

Вывод основан на столбцах, как и top, поэтому вы должны иметь возможность передавать вывод awkили cutманипулировать результатами.

tcdyl
источник
Я пробовал sarраньше со смешанными результатами. Я собираюсь пойти с ответом @ jasonwryan здесь, потому что я могу легко изменить его, чтобы представить использование с обоими ядрами моего процессора.
n0pe
3

Вы смотрели collectl? Это удобно, потому что вы можете адаптировать вывод к вашим потребностям. Смотрите: http://collectl.sourceforge.net/

ewwhite
источник
0

То, что я нашел, похоже на человека, который задал вопрос выше, по крайней мере, на CentOS 6. Если я запускаю top в пакетном режиме всего за одну итерацию, кажется, что он собирает ту же самую цифру, почти как если бы она имела тенденцию начинать с чего-то. это последний помнит показ. Похоже, сверху нужно накопить хотя бы пару цифр, чтобы получить дельты, которые дают вам правильные проценты. Протестировав более 10 итераций, я обнаружил, что появившаяся вторая цифра демонстрирует достаточную дифференциацию при каждом запуске. Таким образом, достаточно легко получить эту линию через

top -b -n 2 | grep Cpu | tail -1

Мне нравится включать это в uptime для загрузки и grep-фильтр выбранных процессов из ps, таких как запросы postgres. Очень простой монитор можно выразить псевдонимом:

alias postgresmon="watch -d 'uptime;top -b -n 2 | grep Cpu | tail -1;ps -ef | grep postgres\: | grep -v idle'"
Роберт Кейси
источник