@julesanchez значение должно быть передано куда-то еще, следовательно, оно должно быть int
user1199739
делать top> myfile.txt И применить ваш фильтр в последующей обработке, не так ли?
JuSchz
11
Команда, которая не требует sysstat:ps -A -o pcpu | tail -n+2 | paste -sd+ | bc
RFon
7
Повторное открытие Я не понимаю, почему это было сочтено не по теме, могут ли те, кто закрыл его, пожалуйста, уточнить?
Джонатан Х
3
Мое понимание /proc/statочень ограничено, но эта однострочная работа достаточно хороша для меня cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{printf "%.2f%\n", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'. С% .2f вы можете контролировать количество десятичных знаков, которые вы хотите вывести, а также sleep 1можете установить время, которое вы хотите усреднить, то есть, если оно делает то, что я думаю, оно делает. Вы можете поместить его в цикл bash while, чтобы проверить это в реальном времени.
РЕДАКТИРОВАТЬ, пожалуйста, прочитайте комментарии, прежде чем копировать-вставить это или использовать это для любой серьезной работы. Это не проверялось и не использовалось, это идея для людей, которые не хотят устанавливать утилиту или для чего-то, что работает в любом дистрибутиве. Некоторые люди думают, что вы можете «apt-get install» все, что угодно.
ПРИМЕЧАНИЕ: это не текущее использование процессора, а общее использование процессора во всех ядрах с момента загрузки системы. Это может сильно отличаться от текущего использования процессора. Для получения текущего значения top (или аналогичного инструмента) необходимо использовать.
Текущее использование процессора потенциально может быть рассчитано с помощью:
Но вы должны установить mpstat, как вы рекомендовали выше. Многие люди не имеют такой гибкости. cat / proc / stat тогда pipe намного проще, чем mpstat, который вы рекомендуете.
vimdude
12
+1 Не понимаю, почему анализ другой утилиты лучше, чем анализ/proc/stat
восстановите Monica, пожалуйста,
9
система + пользователь + простоя = 100%. Так что может быть что-то вроде: grep 'cpu' / proc / stat | awk '{cpu_usage = ($ 2 + $ 4) * 100 / ($ 2 + $ 4 + $ 5)} END {print cpu_usage "%"}'
vimdude
106
Я думаю, что это решение показывает не текущую загрузку процессора, а среднюю загрузку процессора с момента запуска процессора.
Этьен
11
@jlliagre, да, все верно. Чтобы рассчитать текущее использование процессора, а не среднее, вам нужно взять значение в 1 доллар, затем задержку, затем принять значение в 1 доллар и увидеть разницу. Это текущее использование процессора.
vimdude
102
Можешь попробовать:
top -bn1 | grep "Cpu(s)"| \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/"| \
awk '{print 100 - $1"%"}'
Каждый раз, когда я запускаю эту команду, я получаю один и тот же вывод ( 32.7%).
alanaktion
13
Более точный результат дается, когда я использую top -bn2, но это занимает много времени. Из того, что я прочитал, кажется, что это единственный способ получить точный результат.
alanaktion
7
top -bn1кажется дико неточным в моей системе FC20. top -bn2Кажется, работает хорошо.
Мартин Турной
24
Команда в этом ответе написана для систем, где top -vвозвращается procps-ng(например, Fedora). Также есть procps, например, в Ubuntu и CentOS, где команда не работает (всегда указывает на 100%, потому что синтаксический анализ не выполняется из-за того, что цифры процессора по-разному форматируются). Вот версия, которая работает с обеими реализациями:top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f%%\n", prefix, 100 - v }'
Я бы сказал, что 100% простоя это общее использование процессора (в%)
Питер Свенссон
Это процент «не» используется. Этот ответ был хорош, вплоть до grep | хвост | awk part ...
Иордания
Я бы изменил awkчасть на:, awk -F " " '{print (100 - $12)"%"}'что дает форматирование вывода, как он хотел, но в остальном это выглядит хорошо для меня.
Дэн Фего
1
@jordanm Все истины; Я больше голосовал за это, потому что это работает. Я бы сделал это лично:mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12 }'
Дэн Фего
22
Может также дать реальный ответ моим решением, которое было вдохновлено Питером Лильенбергом:
Это будет использоваться awkдля распечатки 100 минус 12-е поле (незанятое) со знаком процента после него. awkбудет делать это только для строки, где 12-е поле имеет только цифры и точки ( $12 ~ /[0-9]+/).
Вы также можете усреднить пять образцов с интервалом в одну секунду:
$ mpstat 15| awk 'END{print 100-$NF"%"}'
Проверьте это так:
$ mpstat 15| tee /dev/tty | awk 'END{print 100-$NF"%"}'
Лучше запустить «mpstat 2 1 | ...», чтобы он отображал статистику за последнюю 1 секунду. В противном случае, по умолчанию, mpstat показывает статистику с начала, и это не сильно меняется со временем
Sarang
1
"mpstat | awk '$ 12 ~ /[0-9.]+/ {print 100 - $ 11"% "}'" эта работа для меня.
AloneInTheDark
@Sarang Спасибо большое !! Наконец я могу получить результаты, которые также conkyотображаются. К сожалению, эта строка ОЧЕНЬ медленная, выполнение ее занимает почти целую секунду.
синтаксическая ошибка
6
@syntaxerror Это занимает ровно 2 секунды, потому что если вы посмотрите на справку по команде, вы увидите, что первый аргумент - это интервал, но он выполняется только один раз из-за второго аргумента, поэтому он ждет 2 полных секунды, пока не вернет результат.
Йохан Bjäreholt
Вопрос закрыт, поэтому добавил мой (аналогичный) ответ к вашему :-) Надеюсь, вы не против. Как и вы, меня вдохновил ответ Питера Лильенберга.
PJ Brunet
16
РЕДАКТИРОВАНИЕ: Я заметил, что в ответе другого пользователя% idle было полем 12 вместо поля 11. В awk обновлен учет, что поле% idle является переменным.
ps -A -o pcpu | tail -n+2 | paste -sd+ | bc
/proc/stat
очень ограничено, но эта однострочная работа достаточно хороша для меняcat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{printf "%.2f%\n", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'
. С% .2f вы можете контролировать количество десятичных знаков, которые вы хотите вывести, а такжеsleep 1
можете установить время, которое вы хотите усреднить, то есть, если оно делает то, что я думаю, оно делает. Вы можете поместить его в цикл bash while, чтобы проверить это в реальном времени.Ответы:
Взгляни на
cat /proc/stat
grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'
РЕДАКТИРОВАТЬ, пожалуйста, прочитайте комментарии, прежде чем копировать-вставить это или использовать это для любой серьезной работы. Это не проверялось и не использовалось, это идея для людей, которые не хотят устанавливать утилиту или для чего-то, что работает в любом дистрибутиве. Некоторые люди думают, что вы можете «apt-get install» все, что угодно.
ПРИМЕЧАНИЕ: это не текущее использование процессора, а общее использование процессора во всех ядрах с момента загрузки системы. Это может сильно отличаться от текущего использования процессора. Для получения текущего значения top (или аналогичного инструмента) необходимо использовать.
Текущее использование процессора потенциально может быть рассчитано с помощью:
источник
/proc/stat
Можешь попробовать:
источник
32.7%
).top -bn2
, но это занимает много времени. Из того, что я прочитал, кажется, что это единственный способ получить точный результат.top -bn1
кажется дико неточным в моей системе FC20.top -bn2
Кажется, работает хорошо.top -v
возвращаетсяprocps-ng
(например, Fedora). Также естьprocps
, например, в Ubuntu и CentOS, где команда не работает (всегда указывает на 100%, потому что синтаксический анализ не выполняется из-за того, что цифры процессора по-разному форматируются). Вот версия, которая работает с обеими реализациями:top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f%%\n", prefix, 100 - v }'
top -l 2 -n 0 -F | egrep -o ' \d*\.\d+% idle' | tail -1 | awk -F% -v prefix="$prefix" '{ printf "%s%.1f%%\n", prefix, 100 - $1 }'
.Попробуй
mpstat
изsysstat
пакетаЗатем некоторые
cut
илиgrep
для анализа информации вам нужно:источник
awk
часть на:,awk -F " " '{print (100 - $12)"%"}'
что дает форматирование вывода, как он хотел, но в остальном это выглядит хорошо для меня.mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12 }'
Может также дать реальный ответ моим решением, которое было вдохновлено Питером Лильенбергом:
Это будет использоваться
awk
для распечатки 100 минус 12-е поле (незанятое) со знаком процента после него.awk
будет делать это только для строки, где 12-е поле имеет только цифры и точки ($12 ~ /[0-9]+/
).Вы также можете усреднить пять образцов с интервалом в одну секунду:
Проверьте это так:
источник
conky
отображаются. К сожалению, эта строка ОЧЕНЬ медленная, выполнение ее занимает почти целую секунду.РЕДАКТИРОВАНИЕ: Я заметил, что в ответе другого пользователя% idle было полем 12 вместо поля 11. В awk обновлен учет, что поле% idle является переменным.
Это должно дать вам желаемый результат:
Если вы хотите простое округление целых чисел, вы можете использовать printf:
источник
mpstat 1 1 | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d",100 - $field) }'
отлично работает для меня, спасибо. обратите внимание на mpstat 11, чтобы убедиться, что загрузка процессора выполняется за секундуmpstat -o JSON -u 1 1 | jq '.sysstat.hosts[0].statistics[0]["cpu-load"][0].idle'