2

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

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

  • df для чтения статуса использования HDD
  • /proc/meminfo (через cat) для чтения состояния RAM
  • 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 ответ1

4

Вы можете использовать top в пакетном режиме и одну итерацию:

top -bn 1

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

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

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 будет использоваться вместо этого.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .