Мне интересно, как вы можете получить системное использование процессора и представить его в процентах, например, с помощью bash.
Образец вывода:
57%
Если имеется более одного ядра, было бы хорошо, если бы можно было рассчитать средний процент.
Мне интересно, как вы можете получить системное использование процессора и представить его в процентах, например, с помощью bash.
Образец вывода:
57%
Если имеется более одного ядра, было бы хорошо, если бы можно было рассчитать средний процент.
Посмотрите на cat /proc/stat
grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'
РЕДАКТИРОВАТЬ, пожалуйста, прочитайте комментарии, прежде чем копировать-вставить это или использовать это для любой серьезной работы. Это не проверялось и не использовалось, это идея для людей, которые не хотят устанавливать утилиту или для чего-то, что работает в любом дистрибутиве. Некоторые люди думают, что вы можете "apt-get install" все, что угодно.
ПРИМЕЧАНИЕ. это не текущая загрузка ЦП, а общее использование ЦП во всех ядрах с момента загрузки системы. Это может сильно отличаться от текущего использования процессора. Чтобы получить текущее значение top (или аналогичный инструмент), необходимо использовать.
Текущее использование процессора потенциально может быть рассчитано с помощью:
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 1;grep 'cpu ' /proc/stat)
Вы можете попробовать:
top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1"%"}'
Попробуйте mpstat
из пакета sysstat
> sudo apt-get install sysstat
Linux 3.0.0-13-generic (ws025) 02/10/2012 _x86_64_ (2 CPU)
03:33:26 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
03:33:26 PM all 2.39 0.04 0.19 0.34 0.00 0.01 0.00 0.00 97.03
Затем некоторые cut
или grep
проанализировать необходимую информацию:
mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 - $ 12}'a
Можно также поднять фактический ответ с моим решением, которое было вдохновлено Питером Лильенбергом:
$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%
Это будет использовать awk
, чтобы распечатать 100 минус 12-е поле (бездействующее), после чего появится знак процента. awk
будет делать это только для линии, где 12-е поле имеет только числа и точки ($12 ~ /[0-9]+/
).
EDITED: я заметил, что в другом ответе пользователя% idle было полем 12 вместо поля 11. awk был обновлен, чтобы учесть, что поле% idle является переменной.
Это даст вам желаемый результат:
mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { print 100 - $field }'
Если вы хотите простое округление целых чисел, вы можете использовать printf:
mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d%%",100 - $field) }'