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

«Как диагностировать причину высокого Load Average на Linux-сервере» — вопрос из категории Операционные системы, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Алгоритм диагностики:

  1. Определить тип нагрузки (CPU vs. I/O): Используйте top или htop. Обратите внимание на:

    • us (user space), sy (system/kernel space): Высокие значения указывают на CPU-bound нагрузку.
    • wa (I/O wait): Высокое значение указывает на I/O-bound нагрузку — система ждет ответа от дисков.
  2. Анализ CPU-bound нагрузки:

    • В top или htop отсортируйте процессы по %CPU, чтобы найти самых активных потребителей.
    • Если виновник — известный процесс (например, веб-сервер или база данных), анализируйте его логи или используйте специфичные для него инструменты профилирования.
  3. Анализ I/O-bound нагрузки:

    • Используйте iostat -x 1 или iotop, чтобы определить, какой процесс и на какой диск создает наибольшую нагрузку на чтение/запись.
      # Показывает статистику по дискам каждую секунду
      iostat -x 1
  4. Проверка оперативной памяти и swap:

    • Команда free -h покажет использование памяти. Активное использование swap-раздела (swap) может быть причиной высокой нагрузки из-за медленных дисковых операций.
  5. Анализ сетевой активности:

    • Используйте ss -tulnp или netstat -tulnp для проверки количества и состояния сетевых соединений. Аномально большое число соединений может указывать на DDoS-атаку или неправильно работающее приложение.

Для долгосрочного анализа и выявления паттернов рекомендуется использовать системы мониторинга, такие как Prometheus + Grafana или утилиту sar из пакета sysstat.