Что означает высокая load average при низкой загрузке CPU
Что проверяют
Понимаете ли вы, что именно считает load average в Linux, и умеете ли по такому симптому дойти до причины, а не перезапустить сервис наугад.
Как отвечать
Load average это скользящее среднее за 1, 5 и 15 минут по числу задач, которые выполняются, готовы выполняться или, и это особенность Linux, находятся в непрерываемом сне (состояние D), то есть ждут диск или сетевую файловую систему. Отсюда и картина из вопроса: процессор простаивает, очередь длинная, значит система упирается не в вычисления.
Дальше разматывается по шагам:
uptimeи деление на число ядер: значение 8 на восьми ядрах это полная, но не запредельная загрузка;vmstat 1: колонка b показывает блокированные задачи, wa показывает долю ожидания ввода-вывода;ps -eo stat,pid,comm: кто именно висит в состоянии D;iostat -x 1: утилизация устройств, время ожидания, длина очереди;pidstat -d 1: кто читает и пишет;- зависшие сетевые точки монтирования и
dmesgна ошибки диска и сброс контроллера.
Частые причины: упёрлись в диск или деградировал массив, недоступен сетевой том, началась подкачка из-за нехватки памяти, лавина процессов, все ждут одну блокировку.
Где спотыкаются
Сравнивают load average с процентами загрузки процессора напрямую и заключают, что метрика врёт. Это разные величины: одна считает задачи в очереди, другая время процессора.
Не нормируют на ядра. Без этого одно и то же число выглядит то катастрофой, то нормой, и порог тревоги ставится наугад.
Записывают в load average любое ожидание. Процесс, который ждёт ответа по сети в обычном прерываемом сне, в среднюю нагрузку не попадает, попадают именно непрерываемые ожидания. Поэтому подозревать в первую очередь надо хранилище, а не медленный внешний сервис.