Как диагностировать причину высокого Load Average на Linux-сервере?

«Как диагностировать причину высокого Load Average на Linux-сервере?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Высокий Load Average (LA) — это классический симптом перегрузки системы. В DevOps мы подходим к диагностике системно, используя цепочку команд и понимая, что LA > числа ядер CPU означает очередь задач.

1. Быстрая первичная диагностика:

# 1. Смотрим общую картину: LA, задачи, CPU, память
htop  # Или `top`, затем нажимаем '1' для просмотра нагрузки по ядрам

# 2. Определяем тип нагрузки: CPU, I/O, Memory?
# В `top` смотрим строки:
#   %Cpu(s): us, sy, id, wa, st
#   %wa (I/O wait) > 5-10% — явный признак проблем с диском/сетью.

# 3. Смотрим на процессы в состоянии 'D' (Uninterruptible Sleep) и 'R' (Running)
ps aux | awk '$8 ~ /D/ { print $0 }'  # Процессы, заблокированные на I/O

2. Детальный анализ по возможным причинам:

  • CPU-bound процессы:
    pidstat 1 5                 # Статистика по процессам каждую секунду
    perf top                    # Профилирование CPU в реальном времени
  • I/O-bound процессы (самая частая причина высокой LA при низком %CPU):
    iostat -xz 1                # Показатели загрузки дисков, await, %util
    iotop -o                    # Показывает процессы, активно ведущие I/O
    # Проверка конкретного диска (если %util близок к 100%)
    sudo smartctl -a /dev/sda
  • Нехватка памяти (вызов swapping):
    free -h
    vmstat 1                    # Обращаем внимание на колонки 'si' (swap in) и 'so' (swap out)
    sar -B 1 3                  # Статистика paging
  • Большое количество процессов/потоков:
    ps -eLf | wc -l             # Общее количество потоков (LWP)
    pstree                      # Визуализация дерева процессов

3. Интеграция с мониторингом (DevOps-подход):

Мы не ждём проблем, а отслеживаем метрики заранее:

  • Prometheus + Node Exporter: Сбор метрик node_load1, node_load5, node_load15, node_cpu, node_disk_io_now.
  • Grafana: Дашборды с визуализацией LA, корреляцией с метриками CPU, Disk I/O, Memory.
  • Алертинг: Настройка правил в Alertmanager при превышении LA порогового значения (например, > 70% от числа ядер в течение 5 минут).

Типичные сценарии и действия:

  • Высокий %wa и LA: Оптимизация запросов к БД, проверка медленных дисков, переход на SSD, настройка кэширования.
  • Много процессов 'D': Часто проблема с NFS или другим сетевым хранилищем. Проверка сетевой задержки и состояния сервера хранения.
  • Всплеск LA и %sy: Возможна проблема с системными вызовами (например, частый fork()). Требуется профилирование приложения.