Какие существуют метрики использования процессора в Linux?

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

Ответ

В Linux ключевые метрики CPU можно разделить на несколько категорий, которые я регулярно анализирую через различные инструменты.

Основные метрики из /proc/stat и утилит (например, mpstat):

  • %user: Процент времени, потраченного на выполнение пользовательских процессов.
  • %system: Процент времени, потраченного на выполнение процессов ядра.
  • %idle: Процент времени, когда CPU простаивал.
  • %iowait: Процент времени, когда CPU простаивал в ожидании завершения операций ввода-вывода. Высокий показатель часто указывает на проблемы с диском.
  • %steal: Актуально для виртуальных машин. Процент времени, которое гипервизор "отобрал" у данной VM для обслуживания других VM.
  • %nice: Процент времени, потраченного на выполнение пользовательских процессов с изменённым (низким) приоритетом (nice).

Практический мониторинг:

  1. mpstat для детального анализа по ядрам:

    # Вывод статистики каждую секунду, 5 раз
    mpstat -P ALL 1 5

    Это помогает выявить неравномерную нагрузку на ядра.

  2. top/htop для оперативного анализа:

    • Load Average (средняя нагрузка): Показывает среднее количество процессов в состоянии "выполняемы" или "ожидают ввода-вывода" за 1, 5 и 15 минут. Значение, превышающее количество ядер CPU, указывает на очередь.
    • %CPU по процессам: Позволяет идентифицировать процессы-пожиратели ресурсов.
  3. Долгосрочный сбор данных с sar:

    # Просмотр исторических данных о CPU (например, за 10:00 утра)
    sar -u -s 10:00:00

    Это незаменимо для анализа трендов и выявления периодических пиков нагрузки.

Контекст для DevOps: Эти метрики я интегрирую в системы мониторинга (Prometheus через node_exporter, Datadog) для настройки алертов. Например, алерт срабатывает при %iowait > 20% в течение 5 минут или при Load Average (5 min) > (количество ядер * 2).