Короткий ответ
Высокий load average при низкой загрузке CPU чаще всего означает, что много процессов находится в состоянии непрерываемого ожидания ввода-вывода (D, uninterruptible sleep) — то есть узким местом является не процессор, а диск, сеть (NFS) или другое медленное устройство, которое ядро ждёт.
Как это работает подробнее
Load average в Linux учитывает не только процессы, готовые к выполнению на CPU, но и процессы в состоянии D, ожидающие завершения операций ввода-вывода на уровне ядра; поэтому показатель может расти даже при полностью свободном процессоре, если множество процессов одновременно ждут медленный диск, перегруженный сетевой диск (NFS/iSCSI) или другую блокирующую операцию.
Пример кода
commands.sh
vmstat 1 5
iostat -x 1 3
ps aux | awk '$8 ~ /D/ {print}'Что использовать на практике
- Практика. диагностику продолжают через vmstat 1 (колонка b — процессы, заблокированные на I/O, и wa — процент времени CPU в ожидании I/O), iostat -x 1 (утилизация и задержка конкретных дисков) и ps aux для поиска процессов в состоянии D; дальнейшие действия зависят от находки — может понадобиться более быстрый диск, оптимизация паттерна записи приложения или устранение проблем с сетевым хранилищем.
Подводные камни
- Риск. Частая ошибка — игнорировать высокий load average, потому что 'CPU же свободен', и не проверять iowait и состояние дисковой подсистемы, упуская реальную причину деградации производительности.