Как получить систему 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
(используйте последний).