Пользователи жалуются, что хост тормозит — найдите узкое место по метрикам
Пользователи жалуются, что приложение на Linux-хосте стало медленным. У вас один снимок системных метрик. Определите узкое место и назовите следующую команду для его подтверждения. Рассуждайте по цифрам — не угадывайте одну причину наугад.
$ uptime
14:02:11 up 7 days, load average: 38.5, 22.1, 9.8
$ top (заголовок)
%Cpu(s): 6.1 us, 3.0 sy, 0.0 ni, 4.0 id, 86.5 wa, 0.4 hi
MiB Mem : 15890 total, 9120 free, 3010 used, 3760 buff/cache
$ # 4 логических ядра
Определите причину и назовите следующую команду для подтверждения.
Load average 38 на 4 ядрах далеко за пределом, но CPU почти простаивает, а 86,5% — это wa (ожидание I/O), и память в норме — значит хост упирается в диск, а не в CPU. Узкое место — дисковый I/O: процессы заблокированы в ожидании хранилища. Подтвердите через iotop или iostat -x, найдя занятое устройство и виновный процесс.
- ✗Читать высокий load average как насыщение CPU, игнорируя колонку wa
- ✗Принимать ожидание I/O (wa) за простой CPU, а не за время блокировки на диске
- ✗Останавливаться на симптоме, не назвав команду для поиска занятого устройства
- →Как колонки
iostat -xвроде%utilиawaitподтвердят дисковое узкое место? - →Если бы ожидание было на сети, какие инструменты вы бы взяли?
Разбор
Прочитайте каждую метрику, прежде чем выбирать причину.
длинную очередь готовых/ожидающих процессов — но сама нагрузка не говорит, чего они ждут.
Огромное число — это 86.5 wa — ожидание I/O. CPU не узкое место; он простаивает в ожидании завершения I/O.
давления swap нет. Память исключаем.
- Load average 38.5 на 4 ядрах. Нагрузка намного выше числа ядер означает
- Заголовок CPU. Реальная работа — лишь
6.1 us + 3.0 sy;4.0 id— простой. - Память.
9120 freeплюс3760 buff/cacheиз 15890 MiB — свободного много,
Значит хост упирается в дисковый I/O: процессы заблокированы в непрерываемом сне на хранилище, что раздувает load average, оставляя CPU простаивающим.
Команды подтверждения:
iostat -x 1 5 # per-device %util and await — find the saturated disk
iotop -oPa # which process is doing the I/O
dmesg -T | tail # disk/controller errors, e.g. a failing drive
Почти 100% %util с большим await на одном устройстве подтверждает узкое место; iotop называет виновный процесс.