Ответ
В моей практике при разборе инцидентов производительности я в первую очередь проверяю следующие ключевые ресурсы:
-
CPU (Центральный процессор):
- Высокая утилизация (load average, %usr/%sys): Указывает на нехватку вычислительной мощности. В облачных средах также важно отслеживать CPU throttling, когда виртуальная машина ограничивается гипервизором.
- Контекстные переключения (context switches): Большое количество переключений между процессами/потоками создает накладные расходы.
-
Память (RAM):
- Нехватка свободной памяти: Приводит к активному использованию свопа (swap), что резко снижает производительность из-за дисковых операций.
- OOM Killer (Out-Of-Memory Killer): В Linux ядро может принудительно завершить процесс при критической нехватке памяти.
-
Ввод-вывод диска (Disk I/O):
- Высокая задержка (latency) и время ожидания (await): Критично для баз данных и дисковых очередей.
- Ограниченная пропускная способность (throughput): Разница между HDD и SSD/ NVMe может быть на порядки.
- Исчерпание IOPS (Input/Output Operations Per Second): Частое ограничение в облачных блочных хранилищах.
-
Сеть (Network):
- Полоса пропускания (bandwidth): Исчерпание канала.
- Задержка (latency) и потери пакетов (packet loss): Критично для распределенных систем и микросервисов.
-
Файловые дескрипторы (File Descriptors):
- Достижение лимита на открытые файлы, сокеты или каналы приводит к ошибкам
EMFILEилиENFILE.
- Достижение лимита на открытые файлы, сокеты или каналы приводит к ошибкам
Пример базового мониторинга в Linux для быстрой диагностики:
# Общая картина нагрузки (CPU, память, процессы)
top -n 1 -b | head -20
# Детальная статистика по дискам (util%, await, r/s, w/s)
iostat -x 1 5
# Использование памяти (своп, кэш, доступная память)
free -h
# Сетевой трафик и ошибки по интерфейсам
iftop -n -P
# Проверка лимитов файловых дескрипторов для процесса (например, Nginx)
cat /proc/$(pgrep nginx | head -1)/limits | grep "open files"
Для постоянного наблюдения мы настраиваем сбор этих метрик в Prometheus (node_exporter) с алертами в Alertmanager при достижении пороговых значений.