Чтение загрузки процессора

Я строю Linux, веб-монитор ресурсов.

Сейчас я с нетерпением жду использования:

  • df для чтения статуса использования HDD
  • /proc/meminfo (через кошку) для чтения состояния ОЗУ
  • mpstat (из пакета sysstat) для чтения загрузки процессора

В то время как df а также /proc/meminfo возвращает данные практически мгновенно, mpstat задержки для заданного интервала - с минимально допустимым значением 1 (в секундах).

Есть ли в режиме реального времени использование процессора, или есть способ сделать mpstat вернуть "мгновенно"?

вывод mpstat:

[psycketom@stone ~]# mpstat -P ALL 1 1
Linux 3.5.4-1-ARCH (stone)      03/05/2013      _x86_64_        (1 CPU)

11:33:15 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11:33:16 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
11:33:16 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:       0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

1 ответ

Решение

Ты можешь использовать top в пакетном режиме и одной итерации:

top -bn 1

Я бы также использовал free вместо разбора meminfo,

Другой способ заключается в использовании psдобавьте% ЦП каждого процесса и разделите на количество ядер, которые есть на вашей машине:

ps axo pcpu | 
 gawk -v cores=`grep -m 1 cores /proc/cpuinfo | cut -d ' ' -f 3` \
      -v cpus=`grep -c processor /proc/cpuinfo` \
         '{k+=$1}END{print k/(cores * cpus);}'

Если ваша система имеет только одно ядро, приведенный выше скрипт завершится с ошибкой, в результате чего:

gawk: cmd. line:1: (FILENAME=- FNR=83) fatal: division by zero attempted

Чтобы заставить его работать, измените k/(cores * cpus) в k/(cores==""?1:cores * cpus), Это проверит ли cores переменная не пуста, если она есть, 1 будет использоваться вместо

Другие вопросы по тегам