Ответ
Для диагностики производительности я смотрю не на один метрик, а на их совокупность. Вот основные:
1. Load Average (Средняя нагрузка) Показывает усредненное количество процессов, готовых к выполнению (состояние R) или ожидающих I/O (состояние D). Выводится как три числа: за 1, 5 и 15 минут.
- Интерпретация: Значение
1.0на одноядерной системе = 100% загрузка. Золотое правило: если нагрузка надолго превышает количество ядер CPU — система перегружена. - Пример: На 4-ядерном сервере
load average: 8.50, 7.20, 6.10говорит о серьезной перегрузке.
2. CPU Utilization (Использование CPU)
Процентное использование, разбитое по типам. Ключевые поля из mpstat или top:
%user: Процессы пользователя.%system: Процессы ядра.%iowait(%wa): Процент времени, когда CPU простаивал в ожидании операций ввода/вывода. Высокийiowait— главный индикатор проблем с диском.%steal(%st): Актуально для виртуальных машин. Показывает, сколько времени гипервизор не давал CPU вашей ВМ. Высокийsteal— сигнал о «шумном соседе» в облаке.%idle: Время простоя.
3. Контекстные переключения (Context Switches) и прерывания (Interrupts)
cs/cswch: Количество переключений контекста между процессами. Резкий рост может указывать на слишком большое количество потоков или активный IPC.in/irq: Количество аппаратных прерываний.
Практический пример диагностики с помощью pidstat:
# Смотрим общую статистику по CPU каждую секунду
mpstat -P ALL 1
# Output example:
# 12:00:01 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
# 12:00:02 all 45.2 0.0 8.1 30.5 0.0 0.2 0.0 0.0 0.0 16.0
# Вывод: Высокий %iowait (30.5%) — система уперлась в диск.
# Определяем, какой процесс вызывает I/O
pidstat -d 1
В системах мониторинга (Prometheus/Grafana) я настраиваю дашборды с графиками:
node_cpu_seconds_total{mode="idle"}(иuser,system,iowait).node_load1,node_load5,node_load15.- Алерт создаю на правило:
load5 > (number_of_cores * 1.5).