Как получить общее использование ЦП (например, 57%) в Linux

Мне интересно, как вы можете получить системное использование cpu и представить его в% (в bash), например.

Пример вывода:

57%

Если бы в случае было более 1 ядра, было бы неплохо, если бы средний процент мог быть выработан

4b9b3361

Взгляните на cat /proc/stat

grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage "%"}'

РЕДАКТИРОВАТЬ, пожалуйста, прочитайте комментарии перед копированием или вставьте это для любой серьезной работы. Это не тестировалось и не использовалось, это идея для людей, которые не хотят устанавливать утилиту или что-то, что работает в любом дистрибутиве. Некоторые люди думают, что вы можете "apt-get install" что-нибудь.

84
ответ дан 10 февр. '12 в 17:48
источник

Вы можете попробовать:

top -bn1 | grep "Cpu(s)" | \
           sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
           awk '{print 100 - $1"%"}'
76
ответ дан 10 февр. '12 в 17:56
источник

Попробуйте 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
31
ответ дан 10 февр. '12 в 17:35
источник

Можно также поднять фактический ответ с моим решением, которое было вдохновлено Питером Лильенбергом:

$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%

Это будет использовать awk, чтобы распечатать 100 минус 12-е поле (бездействующее), после чего появится знак процента. awk будет делать это только для линии, где 12-е поле имеет только числа и точки ($12 ~ /[0-9]+/).

17
ответ дан 10 февр. '12 в 18:11
источник

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) }'
9
ответ дан 10 февр. '12 в 17:57
источник