Как получить систему ioWait

Как я могу получить системы ioWait? Это было бы предпочтительнее, если использовать info интерфейс /proc (я думаю, он где-то там написан), чтобы приложение могло обнаружить это, но внешний вызов exec() из моего приложения был бы приемлемым.

2 ответа

Решение

Это доступно в /proc/stat,

Из документации в исходном коде ядра:

Самая первая строка "cpu" объединяет числа во всех остальных строках "cpuN". Эти числа определяют количество времени, которое процессор потратил на выполнение различных видов работы. Единицы времени в USER_HZ (обычно сотые доли секунды). Значения столбцов следующие слева направо:

  • пользователь: обычные процессы, выполняющиеся в пользовательском режиме
  • приятно: приятные процессы, выполняющиеся в пользовательском режиме
  • система: процессы, выполняющиеся в режиме ядра
  • на холостом ходу
  • iowait: ожидание завершения ввода-вывода
  • IRQ: обслуживание прерываний
  • softirq: обслуживание softirqs
  • украсть: непроизвольное ожидание

Другой способ получить - использовать iostat, Например:

      iostat -c 5

вернется (каждые 5 секунд):

      avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           8.39    0.00   11.42    4.74    0.00   75.46

или в формате JSON:

      iostat -o JSON -c 5
      {
   "sysstat":{
      "hosts":[
         {
            "nodename":"host.example.com",
            "sysname":"Linux",
            "release":"4.15.0-159-generic",
            "machine":"x86_64",
            "number-of-cpus":64,
            "date":"2021/10/27",
            "statistics":[
               {
                  "avg-cpu":{
                     "user":7.32,
                     "nice":0.07,
                     "system":5.60,
                     "iowait":13.59,
                     "steal":0.00,
                     "idle":73.43
                  }
               }
            ]
         }
      ]
   }
}

Здесь такой же процент сообщает top, glances, так далее.

Примечание:

Если вы запустите его один раз, вы будете получать одни и те же значения каждый раз, поэтому способ «исправить» это - запустить его как минимум 2 раза и использовать последние значения:

iostat -c 1 2

что означает: запустить его 2 раза с интервалом в 1 секунду

В bash вы можете получить только iowait значение с:

iostat -c 1 2 | awk 'NF { print $4 }' | tail -n 1

На случай, если JSON, он вернет двух детей младше statistics (используйте последний).

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