Omnia Metria in SAR Collecta — Мониторинг Linux с SAR: обширное описание метрик и как их читать. DevOps.. DevOps. IT-инфраструктура.. DevOps. IT-инфраструктура. linux.. DevOps. IT-инфраструктура. linux. sar.. DevOps. IT-инфраструктура. linux. sar. sysstat.. DevOps. IT-инфраструктура. linux. sar. sysstat. Высокая производительность.. DevOps. IT-инфраструктура. linux. sar. sysstat. Высокая производительность. мониторинг.. DevOps. IT-инфраструктура. linux. sar. sysstat. Высокая производительность. мониторинг. Настройка Linux.. DevOps. IT-инфраструктура. linux. sar. sysstat. Высокая производительность. мониторинг. Настройка Linux. производительность.. DevOps. IT-инфраструктура. linux. sar. sysstat. Высокая производительность. мониторинг. Настройка Linux. производительность. Системное администрирование.

Состояние сервера можно условно сравнить со здоровьем человека: оно у всех разное и умирают все от разных причин. Пульс, давление, температура — это показатели, которые помогают в диагностике нас. В мире Linux эти показатели: CPU, использование памяти, работа дисков и прочее. Как и в медицине, мониторинг можно проводить в реальном времени или анализировать уже собранные данные.

Если у человека проблема с сердцем 🩺, врач может сделать ЭКГ прямо сейчас, но если нужны показатели за длительный период, нужен суточный мониторинг ЭКГ по Холтеру, который может показать, например, проблемы ночью. В Linux этим занимается набор инструментов sysstat, в состав которого входит, в том числе, утилита sar, которая помогает визуализировать данные в логах /var/log/sysstat/.

Разделы:

  • перейти к Часть I. Установка и настройка sysstat.

    • Настройка автоматического сбора данных через cron.

    • Связь sysstat, sar, sadc, /var/log/sysstat, etc/default/sysstat, цикл работы.

    • Связь sa1 и debian-sa1.

    • Таблица: варианты использования sar с параметрами в реальном времени и с файлом.

  • перейти к Часть II. Пример использования sar для чтения из логов двух нод Kubernetes — умозрительный пример.

    • Что показывают top pods и sar: для чего нужно.

  • перейти к Часть III. Команда sar и диагностика проблем: описание метрик и что они означают, наглядные таблицы. Описание проблем.

    • Общая инфо по CPU (sar -u, sar -P ALL, sar -q, sar -f, sar -A -f).

    • Использование памяти (sar -r, sar -S).

    • Диски и ввод-вывод (sar -b, sar -d, sar -p).

    • Сетевые метрики (sar -n DEV, sar -n TCP, sar UPD, sar -n EDEV).

    • Контекстные переключения и задержки (sar -w, sar -W).

    • Использование ресурсов по процессам (pidstat -x).

    • Энергопотребление CPU (sar -m CPU).

    • Полный анализ метрик (sar -A): что в него входит.

    • Другие полезные команды sar (sar -g, sar -v, sar -F, sar -B, sar -H).

I. Установка и настройка sysstat и sar

На следующей картинке среди многообразия инструментов для анализа производительности sar располагается в разделе Various, потому что работает с метриками сразу из нескольких областей.

Многообразие инструментов для анализа производительности Linux. Источник: https://www.brendangregg.com/linuxperf.html

Многообразие инструментов для анализа производительности Linux. Источник: https://www.brendangregg.com/linuxperf.html

В этой статье рассматривается утилита sar из набора инструментов sysstat.

❓ Посмотрим, как она помогает ответить на вопросы:

  • Нагрузка на CPU

    • Какова средняя загрузка процессора за последние часы/дни?

    • Какие процессы потребляют больше всего ресурсов?

    • Были ли моменты высокой нагрузки на CPU?

    • Как распределена нагрузка между user, system, iowait, steal и idle?

  • Использование памяти

    • Как изменялось использование RAM за день?

    • Был ли недостаток свободной памяти в определённое время?

    • Какова нагрузка на swap?

  • Сетевой трафик

    • Какой объем данных проходит через сетевые интерфейсы?

    • Были ли пики сетевой активности?

    • Какой интерфейс нагружен больше всего?

  • Общая производительность системы

    • Как изменилась производительность системы за прошедший период?

    • Какие ресурсы работали на пределе возможностей?

    • Были ли моменты, когда система испытывала нехватку CPU, памяти или сетевых ресурсов?

Все команды приведены для Ubuntu/Debian.

Шаг 1. Обычно набор инструментов sysstat с sar установлен, но проверим версию утилиты:

sudo apt update
apt-cache policy sysstat

Вывод:

sysstat:
  Installed: 12.5.2-2ubuntu0.2
  Candidate: 12.5.2-2ubuntu0.2
  Version table:
 *** 12.5.2-2ubuntu0.2 500
        500 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages
        100 /var/lib/dpkg/status
     12.5.2-2build2 500
        500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages

Если версия Installed отличается от версии Candidate, то версию нужно обновить:

sudo apt upgrade sysstat -y

Либо установить с нуля, если не установлено:

sudo apt-get install sysstat

Шаг 2. Проверка наличия утилиты:

sar -V

Шаг 3. Ожидаемый ответ:

sysstat version 12.5.2

Шаг 4. После установки важно включить автоматический сбор данных для доступа к истории.

Для этого измените параметр ENABLED="false" на ENABLED="true" в конфигурационном файле /etc/default/sysstat используется для включения или отключения автоматического сбора статистики утилитой sysstat.

$ sudo vim /etc/default/sysstat  # Или sudo nano /etc/default/sysstat
Скриншот содержимого /etc/default/sysstat

Скриншот содержимого /etc/default/sysstat

Шаг 5. Перезапустите службу sysstat:

$ sudo systemctl restart sysstat

Начало лирического отступления.

Почему это важно?

  • Сбор исторических данных. Если ENABLED отключен (false), утилита sysstat не будет автоматически собирать данные о производительности системы. При включении активируются фоновые процессы, такие какsadc, которые собирают статистику.

  • Интеграция с другими инструментами. Включенный сбор данных позволяет использовать команды, например, sar, для просмотра исторической статистики.

  • Если оставить ENABLED=false?Исторические данные будут недоступны.

    Положение дел отображено на схеме, утилит больше, но остановимся на этом.

Связь procps, vmstat, sysstat и sar. Авторское..

Связь procps, vmstat, sysstat и sar. Авторское..

Весь цикл работы:

  1. Пользователь настраивает сбор данных. Файл:/etc/default/sysstat. Что настраивается: включение/выключение автоматического сбора: ENABLED="true" или ENABLED="false".

  2. Пользователь настраивает расписание сбора данных. Файл:/etc/cron.d/sysstat. Пример строки крон‑задачи: 5-55/10 * * * * root /usr/lib/sysstat/sa/sa1 1 1.

  3. Служба sysstat.serviceперезапускает крон‑задачу при изменении конфигурации.

  4. Утилита sadc (System Activity Data Collector):

    1. Запускается через крон‑задачу.

    2. Собирает метрики: CPU, память, диски, сеть, процессы.

    3. Сохраняет данные в бинарные файлы: /var/log/sysstat/saXX (для текущего месяца, где XX — день).

  5. Пользователь запрашивает данные утилитой sar(System Activity Reporter). Пользователь запрашивает отчёты с помощью sar: sar /var/log/sysstat/sa10. Она читает данные из файлов /var/log/sysstat/saXX и формирует отчёт.

  6. Вывод для пользователя. Утилитаsarвозвращает пользователю готовый отчёт по производительности системы.

Конец лирического отступления.


Шаг 6. У нас автоматический сбор данных активируется через cron‑задачу (/etc/cron.d/sysstat). Но может быть запущено и через systemd, но мы не будем переключаться.

sudo vim /etc/cron.d/sysstat 

Изменим /etc/cron.d/sysstat:

# Сбор данных каждые десять минут (среднее значение) по рабочим дням.
*/10 * * * 1-5 root command -v debian-sa1 > /dev/null && debian-sa1 600 1

Поле

Значение

Расшифровка

*/10

*/10

Запуск каждые 10 минут

*

*

В любом часу

*

*

В любой день месяца

*

*

В любом месяце

1-5

1-5

Только с понедельника по пятницу

root

root

Запуск от имени суперпользователя (root)

command -v debian-sa1 > /dev/null

command -v debian-sa1 > /dev/null

Проверка, существует ли debian-sa1 в системе (если нет – ничего не выполняется)

&&

&&

Если предыдущая команда успешна, выполняется следующая

debian-sa1 600 1

debian-sa1 600 1

Запускает debian-sa1 с интервалом 600 секунд (10 минут) и 1 замером

Содержимое /etc/cron.d/sysstat

Содержимое /etc/cron.d/sysstat

Шаг 7. Так как редактировался файл с заданиями cron напрямую, а не через crontab -e, службу cron необходимо перезапустить.

sudo systemctl restart cron

Особенности:

*/10 * * * 1-5 root command -v debian-sa1 > /dev/null && debian-sa1 600 1 — обратим внимание на запись 600 1. Она означает, что собираются средние данные за каждые 10 минут (600 секунд) и записывает одну итерацию, т. е., не срез 1 секунды раз в 10 минут, а рассчитывает среднее значение.

*/10 * * * 1-5 root command -v debian-sa1 > /dev/null && debian-sa1 1 1 – здесь запись 1 1 говорит о том, делается раз в десять минут один мгновенный срез.


Начало лирического отступления.

Для понимания работы:

  • sa1 — стандартное название утилиты из пакета sysstat, которая запускает сбор данных через sadc и сохраняет их в файлы /var/log/sysstat/saXX.

  • debian-sa1 — специальная версия команды sa1, которая используется в Debian‑based системах.

Сначала я думала, что debian-sa1 — это символическая ссылка на sa1, но это не так. Это самостоятельный исполняемый файл.

Связь между ними можно проверить командой:

ls -l /usr/lib/sysstat/sa1 /usr/lib/sysstat/debian-sa1

Вывод:

Скриншот результата проверки связи sa1 и debian-sa1

Скриншот результата проверки связи sa1 и debian-sa1

Символической ссылки нет.

Содержимое /usr/lib/sysstat/debian‑sa1 можно посмотреть командой:

sudo cat /usr/lib/sysstat/debian-sa1

Вывод:

#!/bin/sh
# vim:ts=2:et
# Debian sa1 helper which is run from cron.d job, not to needlessly
# fill logs (see Bug#499461).

set -e

# Skip in favour of systemd timer
[ ! -d /run/systemd/system ] || exit 0

# Our configuration file
DEFAULT=/etc/default/sysstat
# Default setting, overridden in the above file
ENABLED=false

# Read defaults file
[ ! -r "$DEFAULT" ] || . "$DEFAULT"

[ "$ENABLED" = "true" ] || exit 0

exec /usr/lib/sysstat/sa1 "$@"

Этот файл представляет собой скрипт, который управляет запуском sa1 .

Конец лирического отступления.


Шаг 8. Проверим работу службы sysstat:

 sudo systemctl status sysstat

✅ Вывод состояния active говорит о том, что она работает:

● sysstat.service - Resets System Activity Logs
     Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; preset: enabled)
     Active: active (exited) since Wed 2025-01-22 20:00:21 UTC; 1h 5min ago
       Docs: man:sa1(8)
             man:sadc(8)
             man:sar(1)
    Process: 882 ExecStart=/usr/lib/sysstat/sa1 --boot (code=exited, status=0/SUCCESS)
   Main PID: 882 (code=exited, status=0/SUCCESS)

Если inactive, то запускаем:

sudo systemctl start sysstat

Шаг 9. Проверим работу работу службы cron:

sudo systemctl status cron

✅ Вывод состояния active говорит о том, что она работает:

● cron.service - Regular background program processing daemon
     Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled; pres>
    Drop-In: /etc/systemd/system/cron.service.d
             └─crond.conf
     Active: active (running) since Fri 2025-01-31 10:33:09 UTC; 1h 22mi>
       Docs: man:cron(8)
   Main PID: 9879 (cron)
      Tasks: 1 (limit: 2274)
     Memory: 328.0K (peak: 1.8M)
        CPU: 66ms
     CGroup: /system.slice/cron.service
             └─9879 /usr/sbin/cron -f -P

Если не работает, то нужно запустить:

sudo systemctl start cron

🚫 Пример вывода с ошибкой:

● cron.service - Regular background program processing daemon
     Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled; preset: enabled)
    Drop-In: /etc/systemd/system/cron.service.d
             └─crond.conf
     Active: active (running) since Wed 2025-01-22 19:57:21 UTC; 1min 51s ago
       Docs: man:cron(8)
   Main PID: 13668 (cron)
      Tasks: 1 (limit: 2274)
     Memory: 332.0K (peak: 600.0K)
        CPU: 2ms
     CGroup: /system.slice/cron.service
             └─13668 /usr/sbin/cron -f -P

Jan 22 19:57:21 compute-vm systemd[1]: Started cron.service - Regular background program processing daemon.
Jan 22 19:57:21 compute-vm cron[13668]: (CRON) INFO (pidfile fd = 3)
Jan 22 19:57:21 compute-vm (cron)[13668]: cron.service: Referenced but unset environment variable evaluates to an empty string: EXTRA_>
Jan 22 19:57:21 compute-vm cron[13668]: Error: bad day-of-week; while reading /etc/cron.d/sysstat
Jan 22 19:57:21 compute-vm cron[13668]: (*system*sysstat) ERROR (Syntax error, this crontab file will be ignored)
Jan 22 19:57:21 compute-vm cron[13668]: (CRON) INFO (Skipping @reboot jobs -- not system startup)

Служба cron работает нормально (active), но из сообщения понятно, что в файле /etc/cron.d/sysstat есть ошибка, из‑за чего он игнорируется. Error: bad day-of-week; while reading /etc/cron.d/sysstat указывает на некорректный синтаксис cron в поле «день недели».

Текст(*system*sysstat) ERROR (Syntax error, this crontab file will be ignored) говорит о том, что весь файл игнорируется из-за ошибки.

Нужно открыть файл и проверить синтаксис cron-задачи:

sudo vim /etc/cron.d/sysstat

В нашем случае была ошибка, не было пробела между * и 1-5:

*/10 * * *1–5 root command ‑v debian‑sa1 > /dev/null && sa1 600 1

Правильный вариант:

*/10 * * * 1-5 root command -v debian-sa1 > /dev/null && sa1 600 1

После исправлений службу cron нужно перезапустить:

sudo systemctl restart cron

Шаг 10. Дальше можно убедиться, что задания из /etc/cron.d/sysstat выполняются:

grep -i "debian-sa1" /var/log/syslog

Вывод одной из строк:

2025-01-31T20:35:01.556865+00:00 compute-vm-2 CRON[9911]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 600 1)

Шаг 11. Ранее мы говорили, что утилита sadc сохраняет данные в бинарные файлы: /var/log/sysstat/saXX (для текущего месяца, где XX — день).

Убедимся, что файл на текущий день (31 января) создаётся.

ls -lh /var/log/sysstat/

Ожидаемый вывод:

-rw-r--r-- 1 root root 1016 Jan 31 03:06 sa31

Шаг 12. Непосредственно использование утилиты sar.

Команда обычно имеет следующий вид:

sar -[параметры для выбора метрик] [частота обновления данных в секундах] [количество повторений]

Разные случаи использования sar с параметрами

Случай

Описание

Пример команды

Период данных

sar без указания частоты и повторений

Показывает средние значения за текущий день (если данные есть).

sar -u

С 00:00 до текущего момента.

sar с указанием частоты повторений (без периода)

Мониторинг в реальном времени до остановки вручную (Ctrl+C).

sar -u 5

Бесконечно с интервалом 5 сек.

sar с указанием частоты повторений и периода

Показывает данные в реальном времени, указанное число раз.

sar -u 5 10

10 обновлений каждые 5 сек.

sar с указанием только периода (без повторений)

Нет такого варианта. sar требует либо частоту, либо файл.

sar с указанием файла

Выводит архивные данные за указанный день.

sar -u -f /var/log/sysstat/sa31

За 31-е число (если файл sa31 есть).

sar с файлом и указанием временного промежутка

Выводит данные за определённый интервал времени в сохранённом файле.

sar -u -s 12:00:00 -e 14:00:00 -f /var/log/sysstat/sa05

С 12:00 до 14:00 за 5 февраля

sar с файлом (последние N записей)

Показывает последние N строк из сохранённого файла.

sar -u -f /var/log/sysstat/sa31 | tail -n 20

Покажет 20 последних записей за день.

sar с файлом (фильтр по времени вручную)

Выводит записи, соответствующие определённому часу.

sar -u -f /var/log/sysstat/sa31 | grep "12:..:"

Покажет все записи за 12-ый час.

sar с указанием -A и файла

Выводит полную статистику по всем метрикам системы, которые входят в (-A).

sar -A -f /var/log/sysstat/sa06

Полная статистика из файла за день.

Команда sar без параметров ≈ sar -u (как в примере ниже), но может зависеть от настроек, а sar ‑u показывает только статистику по CPU:

sar 

Это общая информация за текущий день, если она есть, в противном случае выводятся данные из последнего файла. В «09:34:37 PM » система была перезагружена.

Вывод:

Результат работы команды sar

Результат работы команды sar
  • Описание метрик можно найти ниже в соответствующем разделе про метрики CPU.

  • В сумме все метрики (%user + %nice + %system + %iowait + %steal + %idle) в строке дают 100%, но допускается отклонение из-за округления.

  • Если в системе несколько процессоров или ядер, sar показывает их суммарную или среднюю загрузку в строке с all. Например, у нас 2 ядра, и каждое из них загружено так: %user = 2.0, %user = 1.5, то строка all будет показывать среднее %user = (2.0 + 1.5) / 2 = 1.75.

Если нужна информация по каждому ядру, то нужно ввести команду:

sar -P ALL -f /var/log/sysstat/sa31

Пример вывода для 12 ядер:

20:10:00        CPU     %user     %nice   %system   %iowait    %steal     %idle
20:20:00        all      0.11      0.00      0.12      0.00      0.00     99.77
20:20:00          0      0.04      0.00      0.25      0.01      0.00     99.70
20:20:00          1      0.16      0.00      0.06      0.00      0.00     99.78
20:20:00          2      0.65      0.00      0.08      0.00      0.00     99.27
20:20:00          3      0.02      0.00      0.06      0.00      0.00     99.92
20:20:00          4      0.08      0.00      0.08      0.00      0.00     99.84
20:20:00          5      0.00      0.00      0.03      0.00      0.00     99.97
20:20:00          6      0.08      0.00      0.19      0.01      0.00     99.73
20:20:00          7      0.00      0.00      0.03      0.00      0.00     99.97
20:20:00          8      0.07      0.00      0.37      0.01      0.00     99.55
20:20:00          9      0.04      0.00      0.11      0.01      0.00     99.84
20:20:00         10      0.14      0.00      0.20      0.01      0.00     99.65
20:20:00         11      0.00      0.00      0.00      0.00      0.00    100.00

Если %user + %system < 70–80%, это считается нормальным для большинства задач.

Если %idle ≈ 0%, процессор полностью занят, и система может быть перегружена.

Если %iowait высокое при низком %user, это указывает на проблемы с дисковой подсистемой, а не с CPU.

Пример анализа метрик

Нормальная нагрузка:

CPU     %user     %nice   %system   %iowait    %steal     %idle
all      65.00      5.00     10.00      2.00      0.00     18.00

Метрики:

  1. %user = 65.00

    • Описание: Основная нагрузка на процессор приходится на пользовательские приложения.

    • Анализ: Это нормальное значение для рабочей системы, где активно используются приложения или службы. Значение менее 50–70% считается приемлемым для большинства задач, но зависит от ситуации.

  2. %nice = 5.00

    • Описание: Время, затраченное на выполнение процессов с пониженным приоритетом (nice).

    • Анализ: Небольшое значение (5%) указывает на наличие фоновых задач с пониженным приоритетом, но они не оказывают существенного влияния на общую производительность системы.

  3. %system = 10.00

    • Описание: Процессор тратит 10% времени на выполнение системных задач (например, управление памятью, сетевые операции, драйверы устройств).

    • Анализ: Значение 10% находится в пределах нормы. Высокие значения (>20%) могли бы указывать на проблемы с ядром или драйверами.

  4. %iowait = 2.00

    • Описание: Процессор простаивает 2% времени, ожидая завершения операций ввода-вывода.

    • Анализ: Это низкое значение (<5%), что говорит о том, что система эффективно обрабатывает операции ввода-вывода без значительных задержек.

  5. %steal = 0.00

    • Описание: “Украденное” время гипервизором у виртуальной машины.

    • Анализ: Значение равно 0%, что означает, что система не ограничена ресурсами со стороны гипервизора. Это типично для физических машин или виртуальных машин, которые получают достаточное количество вычислительных ресурсов.

  6. %idle = 18.00

    • Описание: Процессор простаивает 18% времени.

    • Анализ: Это значение достаточно велико (>10%), что указывает на наличие запаса производительности для обработки пиковых нагрузок. Система не перегружена.

Более подробно о проблемах можно узнать из описания ниже в соответствующем разделе про метрики CPU.

Полезно

1. Команда для записи в лог может быть полезна не зависимо от наличия автоматического сбора данных в файлы saXX.

sar -o sarlog 1 1200 > /dev/null 2>&1 &

2. Чем отличается запись в лог от автоматического сбора через sadc?

Характеристика

Ручной сбор (sar -o)

Автоматический сбор (sadc)

Частота сбора

Можно настроить любую частоту (например, каждую секунду).

Обычно каждые 10 минут (настраивается в /etc/cron.d/sysstat).

Файл данных

Данные сохраняются в указанный файл (например, sarlog).

Данные сохраняются в файлы /var/log/sysstat/saXX (где XX — день месяца).

Длительность сбора

Можно собирать данные в течение любого времени (например, 1200 секунд = 20 минут).

Данные собираются постоянно, но разделяются по дням.

Гибкость параметров

Можно выбрать конкретные метрики (например, только CPU или сеть).

Собираются все метрики по умолчанию (CPU, память, диски, сеть и т.д.).

Удобство анализа

Данные изолированы в одном файле, удобно для анализа конкретного теста.

Данные разделены по дням, что удобно для долгосрочного мониторинга, но менее гибко для анализа.

  1. Команда для чтения данных из лога:

sar -u -f /home/ubuntu/sarlog > sarlog.txt

II. Пример использования команды sar для диагностики двух нод Kubernetes при работе автоскейлинга подов

  1. Создаём управляемый кластер Kubernetes с двумя нодами.

  2. Создаем Docker-образ с stress-ng – он будет нагружать CPU.

  3. Переносим образ на ноды и загружаем в containerd.

  4. Запускаем деплоймент в Kubernetes (kubectl apply -f stress-deployment.yaml).

  5. Настраиваем HPA, чтобы он автоматически увеличивал количество подов при высокой нагрузке .

Предварительные настройки

Содержимое файла .Dockerfile

# Используем образ Ubuntu как базовый
FROM ubuntu:latest

# Обновляем пакеты и устанавливаем stress-ng
RUN apt-get update -y && apt-get install -y stress-ng

# По умолчанию запускаем стресс-тест CPU на 90% нагрузки
CMD stress-ng --cpu 2 --cpu-method matrixprod --cpu-load 90 -t 10m --metrics-brief

Собираем докер-образ:

docker build -t stress-ng-test .

Сохраняем в файл и доставляем на обе ноды:

scp stress-ng-test.tar user@{EXTERNAL IP NODE1}:/tmp/.

Загружаем образ в containerd на нодах:

ssh user@89.169.146.68 "ctr -n k8s.io images import /tmp/stress-ng-test.tar"

Создаём манифест stress-deployment.yaml, который запускает 3 пода.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: stress-test
  labels:
    app: stress-ng
spec:
  replicas: 3
  selector:
    matchLabels:
      app: stress-ng
  template:
    metadata:
      labels:
        app: stress-ng
    spec:
      containers:
      - name: stress-ng
        image: stress-ng-test
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: "500m"
          limits:
            cpu: "1000m"

Запускаем в Kubernetes:

kubectl apply -f stress-deployment.yaml 

Проверяем поды:

kubectl get pods kubectl top pods

Добавляем автомасштабирование:

kubectl autoscale deployment stress-test --cpu-percent=80 --min=3 --max=10

Проверяем HPA:

kubectl get hpa 

Запуск sar на всех нодах, чтобы записывать метрики CPU (требует активного демона sadc):

for NODE in <EXTERNAL IP NODE1> <EXTERNAL IP NODE2>; do
    ssh user@$NODE "nohup sar -o /tmp/sardata 1 1200 >/dev/null 2>&1 &"
done

Схематично всё можно представить так:

Иллюстрация организации тестирования. Авторское.

Иллюстрация организации тестирования. Авторское.

После завершения теста можно скачать логи sar:

for NODE in <EXTERNAL IP NODE1> <EXTERNAL IP NODE2>; do
    scp user@$NODE:/tmp/sardata ./sardata_$NODE
done

Просмотр метрик на каждой ноде:

sar -u -f sardata_<EXTERNAL IP NODE1>
sar -u -f sardata_<EXTERNAL IP NODE2>

Удаляем деплоймент и автомасштабирование.

kubectl delete deployment stress-test
kubectl delete hpa stress-test
for NODE in <EXTERNAL IP NODE1> <EXTERNAL IP NODE2>; do
    ssh user@$NODE "pkill -f 'sar -o'"
done

Пример вывода команды sar:

12:07:07        CPU     %user     %nice   %system   %iowait    %steal     %idle
12:07:08        all     64.82      0.00      0.50      0.00      0.00     34.67
12:07:09        all     63.18      0.00      1.00      0.00      0.00     35.82
12:07:10        all     63.68      0.00      0.50      0.00      0.00     35.82

Если %user около 60-70% и idle есть, можно увеличить лимиты CPU в stress-deployment.yaml

Чтобы увидеть нагрузку на каждое ядро CPU отдельно:

sar -P ALL -f sardata_<EXTERNAL IP NODE1>
12:07:07        CPU     %user     %system   %iowait   %idle
12:07:08        0       70.82      1.50      0.00     27.68
12:07:08        1       50.32      2.00      0.00     47.68
12:07:08        all     64.82      0.50      0.00     34.67

Почему это важно:

  • Если CPU all показывает высокую нагрузку (%user > 80%), то все ядра нагружены и кластер перегружен.

  • Если CPU all низкий, но одно ядро загружено на 100%, значит, процесс работает в одном потоке (может, не умеет использовать многопоточность?).

  • Если CPU all средний, но %idle всё равно низкий, можно проверить -P ALL, чтобы узнать, какие ядра загружены больше всего.

Использование sar помогает глубже понять, как Kubernetes масштабирует поды, насколько нагружены ноды, и есть ли узкие места в кластере.

Главная цель теста – проверить, как ноды справляются с нагрузкой, реагирует ли авто-масштабирование (HPA), и есть ли ресурсы для новых подов.

HPA масштабирует поды, основываясь на requests. Аsar дает другую важную информацию — она показывает, как Kubernetes реально использует ресурсы ноды.

Что мы проверяем?

kubectl top pods

sar

Нагрузка на конкретные поды

✅ Да, % от requests

❌ Нет

Общая загрузка всей ноды

❌ Нет

✅ Да

Использование всех ядер CPU

❌ Нет (только по подам)

✅ Да (sar -P ALL)

Загружен ли диск (IOWait)

❌ Нет

✅ Да

Ограничивает ли облако CPU (Steal Time)

❌ Нет

✅ Да

Где еще тратится CPU (кроме подов)

❌ Нет

✅ Да

Проблема 1

  • kubectl top pods показывает нормальную загрузку, но поды работают медленно.

  • HPA не увеличивает реплики, хотя кажется, что нагрузка высокая.

Что покажет sar -u?

12:07:08        CPU     %user   %system   %iowait   %idle
12:07:09        all     30.00    5.00      40.00     25.00   <-- Диск перегружен!
  • %iowait = 40% → подам не хватает скорости доступа к диску!

  • HPA не видит этой проблемы, потому что он смотрит только на CPU, а не на I/O.

Проверить диск:

iostat -x 1 10

Проблема 2

  • kubectl top pods показывает, что HPA добавил новые поды, но CPU ноды все еще загружен.

Что покажет sar -u?

12:07:08        CPU     %user   %system   %steal   %idle
12:07:09        all     60.00    3.00      15.00     22.00   <-- Облачный гипервизор ворует 15% CPU!

Проблема 3:

  • kubectl top pods показывает разные уровни нагрузки у разных подов.

  • Некоторые поды загружены на 100%, а другие почти ничего не делают.

Что покажет sar -P ALL?

12:07:09        CPU     %user   %idle
12:07:10        0       100.00    0.00   <-- Первое ядро забито
12:07:10        1        0.00   100.00   <-- Второе ядро простаивает
12:07:10        all     50.00    50.00   <-- Среднее значение (не показывает реальную нагрузку!)

Один процесс забил 1 ядро, а другое ядро простаивает → значит, нагрузка распределяется неправильно.

Как исправить?

  • Разобраться с многопоточностью (в нашем примере нужно указать 2 ядра `CMD stress-ng –cpu 2 –cpu-method matrixprod …`, а в реальных приложениях это может зависеть от архитектуры и особенностей выполнения кода).

  • Проверить балансировку нагрузки между подами.

III. Команда sar и диагностика проблем: список метрик и что они означают

Ниже представлены таблица с основными опциями sar, их описанием, примерами использования, метриками и описанием возможных проблем.

⚠️ Указанные значения метрик, возможные проблемы и их причины приведены для общего ориентирования. По факту «норма» зависит от назначения, нагрузки сервера и других причин.

🔹 1. Общая информация по CPU

Опция

Описание

Пример использования

Выводимая информация

-u

Статистика использования CPU

sar -u 1 3

Процент времени, затраченного на выполнение процессов пользователя, системных процессов, ожидание ввода-вывода и простоя.

-P ALL

Загрузка каждого ядра процессора отдельно

sar -P ALL 1 3

Загруженность каждого ядра процессора в процентах.

-q

Очередь процессов и нагрузка на систему

sar -q 1 3

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

-f

Чтение сохраненной статистики

sar -f /var/log/sysstat/sa31

Данные за конкретный день.

-A -f

Полная сводка за день

sar -A -f /var/log/sysstat/sa31

Полная статистика за указанный день.

1.1 Статистика использования CPU

Пример вывода sar -u 1 3:

10:10:01 AM     CPU  %user  %nice   %system  %iowait  %steal  %idle
10:10:02 AM     all  12.34   0.00     5.67     0.89     0.00   81.10

Метрика

Почему так называется

Описание

Ориентиры

Time

Время

Временные метки

Показывают момент записи данных

CPU

Центральный процессор

all – средние значения по всем ядрам

%user

User-Level Processes

Время, потраченное на выполнение пользовательских процессов, не использующих привилегии ядра. Например, веб-серверы, базы данных, скрипты.

< 50% считается нормальным. Обычно зависит от нагрузки. Нормальная загрузка для серверов общего назначения до 50%-70%, может быть высоким, если идут трудоёмкие вычисления.

Если сервер является нодой распределённого кластера, следует оставлять запас ресурсов на случай выхода из строя других узлов, чтобы балансировщик мог перераспределить поды.

%nice

Nice-Level

Время, потраченное на выполнение процессов с пониженным приоритетом (nice). Обычно используется для фоновых задач.

Высокий %nice (>20–30%) указывает, что процессы с низким приоритетом занимают значительную часть ресурсов. Ориентир: до 10%.

%system

Kernel-Level Processes

Время, затраченное на выполнение системных (ядро) процессов: управление памятью, сетевыми операциями, драйверами устройств.

Обычно <20%. Высокие значения могут указывать на проблемы в ядре.

%iowait

Input/Output Wait

Время ожидания завершения операций ввода-вывода. CPU ждет данных от диска, сети или другого устройства.

Обычно <5%. Высокие значения (>20%) говорят о проблемах с дисками или I/O.

%steal

Steal Time

Время, «украденное» гипервизором у виртуальной машины (актуально для ВМ). Если хост перегружен, виртуальной машине не хватает CPU.

Обычно 0%. Любое значение >0% важно для виртуальных машин, так как указывает на нехватку ресурсов.

%idle

Idle Time

Процент времени, когда процессор простаивает. Чем больше, тем лучше, если нет необходимости в интенсивной загрузке CPU.

Если %idle < 5%, это сигнал о том, что CPU работает на пределе возможностей. Ориентир: > 10%.

Описание проблем общее

Метрика

Проблема

%user высок (>80%)

Процессор сильно загружен пользовательскими процессами, что может привести к замедлению системы.

Проверить активные процессы черезtopилиhtop. Определить, какие процессы потребляют больше всего CPU. Рассмотреть возможность оптимизации или ограничения ресурсов для этих процессов.

%nice высок (>20%)

Запущено много фоновых задач с низким приоритетом, что может повлиять на другие процессы.

%system высок (>30%)

Процессор тратит слишком много ресурсов на системные вызовы, работу с файлами, сетью или драйверами.

%iowait высок (>10-20%)

Процессор простаивает в ожидании ввода-вывода, возможны задержки в работе системы.

Проверить дисковую активность: sar -d 1 3. Проверить swap: sar -S 1 3. Убедиться, что диск не перегружен, использовать другие диски или увеличить оперативную память.

%idle низкий (<10%)

CPU постоянно занят, что может вызвать тормоза системы.

Проверить очереди процессов: sar -q 1 3, нагрузку процессов top или htop. Уменьшить фоновую нагрузку или добавить вычислительные ресурсы.

%steal >0% (на виртуальных машинах)

Ограничивается доступ к CPU, возможны проблемы с производительностью. Увеличить количество выделенных процессорных ресурсов для ВМ, изменить тип ВМ.

Описание проблем в зависимости от назначения сервера

Проблемная метрика

Описание проблемы для нод Kubernetes

Описание проблемы для нод кластера СУБД

Описание проблемы для ВМ общего назначения (GitLab, CI/CD, веб-серверы)

%user >80%

Поды с высокой CPU-нагрузкой могут перегружать ноду. Проверьте поды через kubectl top pods и ограничьте ресурсы. Или добавьте новые ресурсы или ноды, в зависимости от причин.

Высокая нагрузка на CPU может быть вызвана сложными запросами или большим количеством одновременных операций. Оптимизируйте запросы.

Высокая нагрузка в моменте на CPU может быть вызвана сборкой кода (CI/CD), обработкой запросов (веб-серверы) или фоновыми задачами.

%nice >20%

Фоновые процессы внутри контейнеров могут занимать много ресурсов. Проверьте приоритеты процессов через renice.

Задачи резервного копирования или сбора статистики могут использовать низкоприоритетные процессы.

Фоновые задачи, такие как сборка артефактов или логирование, могут занимать много ресурсов.

%system >30%

Сетевое взаимодействие между подами или работа с Persistent Volumes может вызывать высокую нагрузку на системные вызовы.

Файловые операции (запись логов, дампов) или сетевое взаимодействие между узлами кластера могут вызывать высокую нагрузку.

Системные вызовы могут быть связаны с работой файловой системы, сетью или драйверами.

%iowait >10-20%

Использование Persistent Volumes (PV) может вызывать задержки ввода-вывода. Проверьте дисковую активность через sar -d.

Чтение/запись больших объемов данных может вызывать задержки. Убедитесь, что дисковая подсистема не перегружена.

Задержки ввода-вывода могут быть вызваны интенсивной записью логов, сборкой проектов или чтением/записью файлов.

%idle <10%

Нода перегружена из-за большого количества подов. Добавьте новые ноды или увеличьте ресурсы существующих.

Высокая нагрузка на обработку запросов может вызывать тормоза. Рассмотрите шардирование или масштабирование кластера.

Сервер перегружен из-за интенсивной работы приложений. Увеличьте вычислительные ресурсы или оптимизируйте работу приложений.

%steal >0%

Конкуренция за ресурсы между подами может вызывать ограничения доступа к CPU. Увеличьте выделенные ресурсы для нод.

Конкуренция за ресурсы между узлами кластера может вызывать ограничения доступа к CPU. Увеличьте ресурсы для ВМ с БД.

Ограничение ресурсов со стороны хост-системы или гипервизора может вызывать снижение производительности. Измените тип ВМ.

🔹 2. Использование памяти

Опция

Описание

Пример использования

Выводимая информация

-r

Использование оперативной памяти

sar -r 1 3

Объем используемой и свободной памяти, кеша и буферов.

-S

Использование swap (подкачки)

sar -S 1 3

Количество страниц памяти, выгруженных в swap.

2.1 Использование оперативной памяти

Пример вывода sar -r 1 3 :

10:20:01 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit  %commit
10:20:02 AM   1024000  4096000    80.00     250000   1024000   2097152    50.00

Описание метрик

Метрика

Почему так называется

Описание

Ориентиры

kbmemfree

Free Memory (в килобайтах)

Свободная оперативная память

Должно быть не 0, если 0 – система перегружена.

kbmemused

Used Memory (в килобайтах)

Используемая оперативная память

Высокие значения – возможна нехватка ОЗУ.

%memused

Memory Utilization

Процент использования ОЗУ

> 90% – потенциальные проблемы. Не всегда критично, если большая часть памяти используется под кеш.

kbbuffers

I/O Buffers (в килобайтах)

Буферы ввода-вывода

Должны быть выше 0, если низкие – возможна нехватка кеша.

kbcached

File System Cache (в килобайтах)

Кеш файловой системы

Высокие значения ускоряют работу диска.

kbcommit

Committed Memory (в килобайтах)

Требуемая память для всех процессов

Если превышает объем физической памяти – возможна активная подкачка.

%commit

Commit %

Процент запрошенной памяти

Должно быть < 100%, если выше – процессы требуют больше памяти, чем доступно.

Описание проблем

Метрика

Проблема

Если система начинает активно использовать swap, значит, памяти не хватает. Проверить %memused и kbcommit — если больше 90%, возможна нехватка ОЗУ. Запустить free -m для уточнения текущего состояния памяти.

%memused близок к 100%

Вся оперативная память занята, что может приводить к замедлению работы системы. Приложения могут начинать использовать swap, что существенно снижает производительность. Критическим является рост kbswpused (использование swap), а не только %memused.

Использовать free -m для проверки свободной памяти. Проверить процессы с высокой нагрузкой на память (ps aux --sort=-%mem | head -10). Оптимизировать код приложения или увеличить объем оперативной памяти. Проверить sar -S 1 3, если активно используется swap.

%kbcommit превышает объем физической памяти

Система выделяет больше памяти, чем физически доступно, возможны частые обращения к swap.

Проверить нагрузку с помощью vmstat 1 5 (поля si и so). Оценить процессы, потребляющие много памяти (ps aux --sort=-%mem). Увеличить объем RAM.

высокий %kbcached

Большая часть оперативной памяти отдана под кеш, что может уменьшить доступную память для приложений. Может указывать на интенсивные операции с диском.

Проверить sar -b 1 3 для оценки дисковой активности. Освободить кеш вручную. Оптимизировать работу с диском, использовать другие.

%kbmemfree постоянно низкое

Система практически не оставляет свободной памяти. Может указывать на высокую нагрузку или утечки памяти.

Проверить использование памяти процессами (smem -t или top). Анализировать работу с кешем (sar -r 1 3 и sar -b 1 3). Рассмотреть увеличение оперативной памяти или перераспределение ресурсов.

🔹 3. Диски и ввод-вывод

Опция

Описание

Пример использования

Выводимая информация

-b

Статистика операций ввода-вывода

sar -b 1 3

Количество операций чтения/записи в секунду.

-d

Статистика по дискам

sar -d 1 3

Количество операций на каждом диске, задержки ввода-вывода.

-p -d

Детальная статистика по дискам

sar -p -d 1 3

Развернутая информация о логических томах и их использовании.

3.1 Статистика операций ввода-вывода

Пример вывода sar -b 1 3:

10:30:01 AM       tps      rtps      wtps      bread/s      bwrtn/s
10:30:02 AM       5.42      3.12      2.30      512.00       256.00

Описание метрик

Параметр

Почему так называется

Описание

Ориентиры

tps

Transactions Per Second

Количество операций ввода-вывода в секунду (чтение + запись).

Выше 100 на SSD может указывать на высокую нагрузку.

rtps

Read Transactions Per Second

Количество операций чтения в секунду.

Высокое значение может означать интенсивное чтение, например, базу данных.

wtps

Write Transactions Per Second

Количество операций записи в секунду.

Высокие значения могут быть связаны с логированием или swap.

bread/s

Bytes Read Per Second

Количество байтов, читаемых с диска в секунду.

В норме для серверов база данных выше 1000 KB/s.

bwrtn/s

Bytes Written Per Second

Количество байтов, записываемых на диск в секунду.

Высокие значения могут указывать на интенсивные операции записи.

Описание проблем

Метрика

Проблема

Высокое значение tps .

Система выполняет много дисковых операций, что перегружает систему.
Нормально для серверов баз данных и файловых серверов, но может указывать на дисковый I/O bottleneck .

Проверить iostat -dx 1 для анализа активности дисков. Использовать iotop для поиска процессов, оптимизировать кэширование.

Низкое значение tps.

Операций ввода-вывода мало, что может указывать на низкую нагрузку или проблему с диском.

Проверить процессы (ps aux --sort=-%cpu и ps aux --sort=-%mem) . Проверить загрузку CPU (sar -u 1 3), возможно, CPU перегружен и ограничивает производительность дисков.

Высокий tps при низком bread/s и bwrtn/s.

Большое количество мелких операций ввода-вывода .

Высокий rtps .

Система активно читает с диска, возможен недостаток кеширования.

Проверить sar -r 1 3, если kbcached низкий — увеличить кеширование в настройках . Оптимизировать работу с базой данных.

Низкий rtps при высокой загрузке CPU .

Процессы могут быть заблокированы на диске (I/O wait) .

Проверить %iowait в sar -u 1 3, если выше 10% — диск тормозит систему. Использовать iotop для поиска процессов с блокирующим I/O.

Если rtps значительно превышает wtps .

Система в основном выполняет чтение (например, база данных активно запрашивает данные).

Высокий wtps .

Система активно записывает данные, возможна перегрузка диска. Может быть вызвано логами (journald, syslog), базами данных, интенсивным логированием в веб-приложениях.

Использовать iotop для выявления процессов с высокой нагрузкой на запись. Ограничить частоту записи логов.

Низкий wtps при высокой нагрузке на CPU .

Процессы могут ожидать завершения дисковых операций.

Проверить iostat -dx 1, sar -d 1 3 для анализа задержек диска.

Если wtps выше, чем rtps.

Процессы активно записывают данные (например, логирование, кеширование).

Высокий bread/s при низком rtps .

Большие файлы читаются за меньшее количество операций (например, видеопоток или дамп базы данных), т.е., большие объёмы за раз.

Может быть нормальным (дамп БД), но диск может не справляться. Если система замедляется, нужно проверить диск (iostat, smartctl) и оптимизировать кеширование (sysctl, настройки базы данных).

Низкий bread/s при высокой задержке в чтении (await в iostat) .

Диск работает медленно.

Проверить состояние диска.

3.2 Статистика по дискам

Пример вывода sar -d 1 3 :

18:57:59          DEV       tps     rkB/s     wkB/s     dkB/s   areq-sz    aqu-sz     await     %util
18:58:00          sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
18:58:00          sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
18:58:00          sdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Описание метрик

Параметр

Почему так называется

Описание

Ориентиры

DEV

Device

Имя устройства (например, sda, sdb).

tps

Transactions per Second

Количество операций ввода-вывода в секунду.

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

rkB/s

Read KB per Second

Количество данных, читаемых с диска в секунду.

Если значения высокие, значит диск активно используется.

wkB/s

Write KB per Second

Количество данных, записанных на диск в секунду.

Высокие значения означают активную запись на диск.

dkB/s

Discard KB per Second

Количество данных, отброшенных диском.

Если значения высокие, возможно, SSD активно очищает блоки.

areq-sz

Average Request Size

Средний размер запроса к диску.

Низкие значения указывают на большое количество мелких операций.

aqu-sz

Average Queue Size

Средний размер очереди запросов.

Высокие значения могут указывать на перегруженность диска.

await

Average Wait Time

Среднее время ожидания операции (мс).

Высокие значения означают задержки в дисковых операциях.

%util

Disk Utilization

Процент времени, когда диск был занят обработкой I/O.

Если значение близко к 100%, диск загружен полностью.

Описание проблем

Проблемная метрика

Описание проблемы (включая рекомендации)

tps высокий (>1000)

Высокое количество операций ввода-вывода указывает на перегрузку дисковой подсистемы. Это может быть вызвано интенсивной работой диска (например, чтение/запись больших объемов данных).

Проверьте iostat -dx 1. Если util% близко к 100%, диск перегружен. Используйте iotop для выявления процессов, активно использующих диск.

tps низкий (<50) при медленной работе системы

Низкая производительность системы может быть вызвана задержками дисковых операций или высоким временем ожидания (await). Проверьте iostat -x 1 5. Если await выше 10 мс, это указывает на задержки на диске.

rkB/s или wkB/s высокие (>100 MB/s)

Выполняются крупные операции чтения/записи (например, дампы БД, потоковое чтение/запись). Большие объемы данных читаются или записываются за короткое время. Это может быть связано с активной работой базы данных или файловых операций.

Проверьте sar -b 1 3. Если bread/s или bwrtn/s высокие, оптимизируйте файлы или включите кэширование. Перенесите логи и базы данных на отдельный диск.

areq-sz высокий (>512 KB)

Читаются или записываются большие объемы данных за раз. Это может быть связано с выполнением крупных операций (например, резервное копирование или загрузка больших файлов). Убедитесь, что такие операции выполняются в непиковое время.

Если это регулярные задачи, рассмотрите использование более производительных дисков.

areq-sz низкий (<4 KB)

Диск работает с большим количеством мелких операций чтения/записи. Это снижает эффективность кэширования и может быть вызвано активной работой базы данных или частыми записями логов. Оптимизируйте настройки базы данных (например, увеличьте размер буфера).

aqu-sz высокий (>2)

Очередь запросов на диск переполнена, диск не успевает обрабатывать I/O. Большой размер очереди указывает на то, что диск не справляется с нагрузкой. Это может быть вызвано высоким количеством одновременных операций ввода-вывода.

Проверьте iostat -x 1 5. Если await высокий, это указывает на задержки.

await высокий (>10 мс)

Диск перегружен или работает медленно. Высокое время ожидания операций указывает на задержки в дисковых операциях. Это может быть связано с перегрузкой диска или проблемами с аппаратным обеспечением.

%util высокий (>80-90%)

Диск работает на пределе возможностей. Если значение %util близко к 100%, диск полностью загружен и не справляется с текущей нагрузкой. Проверьте iotop для выявления процессов, активно использующих диск.

%util низкий (<50%) при высоком await

Возможны проблемы с драйверами или контроллером диска. Низкая загрузка диска при высоком времени ожидания может указывать на проблемы с драйверами, контроллером или конфигурацией дисковой подсистемы.

🔹 4. Сетевые метрики

Опция

Описание

Пример использования

Выводимая информация

-n DEV

Статистика по сетевым интерфейсам.

sar -n DEV 1 3

Скорость передачи данных, ошибки, пропущенные пакеты.

-n TCP, UDP

Статистика TCP/UDP-соединений.

sar -n TCP,UDP 1 3

Количество установленных и разорванных соединений.

-n EDEV

Расширенная статистика по сетевым интерфейсам.

sar -n EDEV 1 3

Количество сетевых ошибок, потерь пакетов.

4.1 Статистика по сетевым интерфейсам

Пример вывода sar -n DEV 1 3:

10:40:01 AM IFACE  rxpck/s  txpck/s  rxkB/s  txkB/s  rxcmp/s  txcmp/s  rxmcst/s
10:40:02 AM  eth0   120.50   100.30   512.00   256.00   0.00     0.00     0.00

Описание метрик

Метрика

Почему так называется

Описание

Ориентиры

IFACE

Network Interface

Название сетевого интерфейса (eth0, wlan0).

eth0, lo, wlan0 и т. д.

rxpck/s

Received Packets per Second

Количество полученных пакетов в секунду.

Высокое значение — активный входящий трафик.

txpck/s

Transmitted Packets per Second

Количество переданных пакетов в секунду.

Высокое значение — активный исходящий трафик.

rxkB/s

Received KB per Second

Объем полученных данных в килобайтах в секунду.

Высокие значения могут указывать на скачивание данных, могут быть нормальными для сетевых серверов.

txkB/s

Transmitted KB per Second

Объем переданных данных в килобайтах в секунду.

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

rxcmp/s

Compressed Packets Received

Количество полученных сжатых пакетов.

Обычно 0, если нет аппаратного сжатия.

txcmp/s

Compressed Packets Transmitted

Количество переданных сжатых пакетов.

Обычно 0, если нет аппаратного сжатия.

rxmcst/s

Multicast Packets Received

Количество полученных мультикаст-пакетов.

Высокие значения могут указывать на стриминг или IPTV.

🔹 5. Контекстные переключения и задержки

Опция

Описание

Пример использования

Выводимая информация

-w

Частота переключений задач

sar -w 1 3

Количество контекстных переключений в секунду.

-W

Статистика подкачки

sar -W 1 3

Число выгруженных и загруженных страниц памяти.

5.1 Частота переключений задач

Пример вывода sar -w 1 3:

10:50:01 AM     proc/s   cswch/s
10:50:02 AM       2.34     15.67

Описание метрик

Метрика

Почему так называется

Описание

Ориентиры

proc/s

Processes Created Per Second

Количество новых процессов, создаваемых в секунду.

Высокое значение может указывать на частые форки процессов.

cswch/s

Context Switches Per Second

Количество контекстных переключений в секунду.

Высокое значение может быть вызвано частыми переключениями потоков. Плохая настройка планировщика задач. Интерпретация зависит от типа нагрузки, может быть нормальной.

5.2 Статистика подкачки

Пример вывода sar -W 1 3:

12:00:01 AM  pswpin/s pswpout/s
12:00:02 AM      0.00      0.00
12:00:03 AM      1.20      3.50
12:00:04 AM      0.00      0.00
Average:         0.40      1.17

Описание метрик

Метрика

Почему так называется

Описание

Ориентиры

pswpin/s

Pages Swapped In Per Second

Количество страниц, загруженных обратно в RAM из swap.

Высокое значение указывает на нехватку оперативной памяти. Возможна некорректная настройка системы.

pswpout/s

Pages Swapped Out Per Second

Количество страниц, выгруженных в swap.

Высокое значение свидетельствует об интенсивном использовании подкачки. Возможна некорректная настройка системы.

🔹 6. Использование ресурсов по процессам

Опция

Описание

Пример использования

Выводимая информация

-x PID

Статистика по конкретному процессу

pidstat -x 1234 1 3

Используется pidstat , a не sar.

Загрузка процессора указанным процессом.

-X

Расширенная статистика процессов

pidstat -X 1 3

Детальная информация по использованию CPU процессами.

6.1 Статистика по конкретному процессу

Пример вывода pidstat -x 673 1 3:

11:00:01 AM PID   %user  %system  %steal  %iowait  %idle 
11:00:02 AM 1234   50.00   10.00    0.00    5.00    35.00

Метрики такие же, как в п. 1 дляsar -u и sar -P ALL, кроме %nice.

🔹 7. Энергопотребление CPU

Опция

Описание

Пример использования

Выводимая информация

-m CPU

Энергопотребление CPU

sar -m CPU 1 3

Анализ энергопотребления процессора.

Пример вывода sar -m CPU 1 3:

17:16:38        CPU       MHz
17:16:39        all   2096.05

Описание метрик

Метрика

Почему так называется

Описание

Ориентиры

CPU

Центральный процессор

all – среднее значение по всем ядрам.

MHz

Частота процессора в MHz

Текущая тактовая частота процессора в мегагерцах.

Нормальная частота – соответствует базовой частоте процессора. Если ниже – ограничение по ресурсам или энергосберегающий режим. Высокая частота при низкой нагрузке – процессорное время не используется эффективно или ВМ настроена на высокую производительность.

🔹 8. Полный анализ системы

Опция

Описание

Пример использования

Выводимая информация

-A

Сбор всей доступной статистики

sar -A 1 3

Полный обзор всех метрик системы. Может быть очень объемным, поэтому рекомендуется фильтровать данные.

Вывод sar -A 1 3 эквивалентен команде:

sar -bBdFHISvwWy -m ALL -n ALL -q ALL -r ALL -u ALL

Где метрики:

  • -b (статистика операций ввода-вывода)

  • -B (статистика страничной активности)

  • -d (статистика по дискам)

  • -F (количество процессов, завершённых за секунду)

  • -H (высокочастотные события ядра)

  • -I (статистика аппаратных и программных прерываний)

  • -S (статистика использования раздела подкачки swap)

  • -v (файловые дескрипторы)

  • -w (частота переключений задач)

  • -W (статистика подкачки)

  • -y (статистика процессов, ожидающих ввод-вывод)

  • -m ALL (все доступные метрики по CPU)

  • -n ALL (все доступные сетевые метрики)

  • -q ALL (все доступные метрики нагрузки системы)

  • -r ALL (все доступные метрики памяти)

  • -u ALL (все доступные метрики использования CPU)

🔹 9. Другие полезные команды sar

Опция

Описание

Пример использования

Выводимая информация

Возможные проблемы и интерпретация

-q

Загрузка системы и очередь процессов

sar -q 1 3

Средняя нагрузка на систему, процессы в очереди.

Высокие значения runq-sz могут указывать на перегрузку CPU или нехватку ресурсов.

-v

Информация о дескрипторах файлов

sar -v 1 3

Количество открытых файловых дескрипторов.

Если число дескрипторов растет, возможно, утечки файловых дескрипторов (FD leak).

-F

Производительность файловых систем

sar -F 1 3

Число операций чтения и записи файловой системы.

Высокие значения могут указывать на узкое место ввода-вывода или интенсивную работу с диском.

-B

Статистика страничной активности

sar -B 1 3

Количество обращений к страницам памяти (major/minor faults).

Высокие pgfault/s могут указывать на нехватку памяти или неэффективное управление страницами.

-H

Высокочастотные события ядра

sar -H 1 3

Мониторинг событий ядра, включая планировщик процессов.

Высокие значения могут указывать на интенсивные системные вызовы.

9.1 Загрузка системы и очередь процессов

Вывод sar -q 1 3:

18:38:38      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
18:38:39            0       328      0.04      0.01      0.00         0
18:38:40            0       328      0.04      0.01      0.00         0
18:38:41            0       328      0.04      0.01      0.00         0
Average:            0       328      0.04      0.01      0.00         0

Описание метрик

Параметр

Почему так называется

Описание

Ориентиры

runq-sz

Run Queue Size

Количество процессов в очереди на выполнение.

Высокие значения указывают на перегруженность CPU.

plist-sz

Process List Size

Общее количество процессов в системе.

Резкий рост может указывать на проблему с форками.

ldavg-1

Load Average (1 минута)

Средняя загрузка CPU за 1 минуту.

Значение > количества ядер может указывать на перегрузку. Возможны проблемы с I/O.

ldavg-5

Load Average (5 минут)

Средняя загрузка CPU за 5 минут.

Используется для оценки трендов нагрузки. Возможны проблемы с I/O.

ldavg-15

Load Average (15 минут)

Средняя загрузка CPU за 15 минут.

Полезно для анализа долгосрочных нагрузок. Возможны проблемы с I/O.

9.2 Информация о дескрипторах файлов

Вывод sar -v 1 3:

18:42:17    dentunusd   file-nr  inode-nr    pty-nr
18:42:18        29263      1568     44044         2
18:42:19        29263      1568     44044         2

Описание метрик

Параметр

Почему так называется

Описание

Ориентиры

inode-nr

Inodes Number

Количество выделенных inodes в системе.

Высокие значения могут указывать на активное файловое использование.

dentunusd

Directory Entries Unused

Количество неиспользуемых записей каталогов.

Если значение высокое, возможно, система создала больше записей каталогов, чем использует, что может указывать на плохую эффективность файловой системы.

file-nr

File Descriptors

Число открытых файловых дескрипторов.

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

pty-nr

Pseudo Terminals Number

Число псевдотерминалов в системе.

Если значение слишком высокое, возможно, процессы создают много псевдотерминалов, что может указывать на проблемы с терминальными сеансами или утечки.

9.3 Информация о высокочастотных событиях ядра

Вывод sar -H 1 3:

19:01:01    kbhugfree kbhugused  %hugused kbhugrsvd kbhugsurp
19:01:02            0         0      0.00         0         0
19:01:03            0         0      0.00         0         0
Average:            0         0      0.00         0         0

Описание метрик

Параметр

Почему так называется

Описание

Ориентиры

kbhugfree

KB Huge Free Pages

Количество свободных больших страниц (hugepages).

Нулевые значения означают, что большие страницы не используются.

kbhugused

KB Huge Used Pages

Количество использованных больших страниц.

Высокие значения означают активное использование hugepages.

%hugused

Percent Huge Used

Доля использованных больших страниц в процентах.

Если 100%, все доступные hugepages заняты.

kbhugrsvd

KB Huge Reserved

Количество зарезервированных hugepages.

Если 0, то нет предварительно выделенных страниц.

kbhugsurp

KB Huge Surplus

Количество дополнительных hugepages, выделенных динамически.

Если высоко, система активно использует динамическое выделение.

9.4 Информация об обращении к страницам памяти.

Вывод sar -B 1 3 :

19:10:53     pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
19:10:54         0.00      0.00     14.00      0.00     66.00      0.00      0.00      0.00      0.00
19:10:55         0.00      0.00      0.00      0.00     32.00      0.00      0.00      0.00      0.00
19:10:56         0.00      0.00      0.00      0.00      1.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      4.67      0.00     33.00      0.00      0.00      0.00      0.00

Описание метрик

Параметр

Почему так называется

Описание

Ориентиры

pgpgin/s

Pages Paged In per Second

Количество страниц, загруженных в оперативную память из swap.

Высокие значения могут указывать на нехватку физической памяти.

pgpgout/s

Pages Paged Out per Second

Количество страниц, выгруженных из оперативной памяти в swap.

Высокие значения могут означать активное использование swap.

fault/s

Page Faults per Second

Общее количество ошибок страниц в секунду.

Высокие значения могут указывать на интенсивную работу с памятью.

majflt/s

Major Faults per Second

Количество серьезных ошибок страниц, требующих обращения к диску.

Высокие значения могут свидетельствовать о нехватке RAM.

pgfree/s

Pages Freed per Second

Число освобожденных страниц памяти.

Высокие значения могут указывать на интенсивное управление памятью.

pgscank/s

Pages Scanned per Second (Kswapd)

Количество страниц, проверяемых демоном Kswapd.

Высокие значения могут указывать на активный поиск страниц для освобождения.

pgscand/s

Pages Scanned per Second (Direct)

Количество страниц, проверяемых непосредственно процессами.

Высокие значения могут означать сильную нехватку памяти.

pgsteal/s

Pages Stolen per Second

Количество страниц, вытесненных для освобождения памяти.

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

%vmeff

Virtual Memory Efficiency

Эффективность работы виртуальной памяти.

Если 0%, страницы не освобождаются, если 100%, все освобожденные страницы были вытеснены.

10.5 Информация о числе операций чтения и записи файловой системы

Пример вывода sar -F 1 3:

19:21:54     MBfsfree  MBfsused   %fsused  %ufsused     Ifree     Iused    %Iused FILESYSTEM
19:21:55      1020086     10932      1.06      6.15  66933040    175824      0.26 /dev/sdc

19:21:55     MBfsfree  MBfsused   %fsused  %ufsused     Ifree     Iused    %Iused FILESYSTEM
19:21:56      1020086     10932      1.06      6.15  66933040    175824      0.26 /dev/sdc

19:21:56     MBfsfree  MBfsused   %fsused  %ufsused     Ifree     Iused    %Iused FILESYSTEM
19:21:57      1020086     10932      1.06      6.15  66933040    175824      0.26 /dev/sdc

Описание метрик

Параметр

Почему так называется

Описание

Ориентиры

MBfsfree

MB Filesystem Free

Свободное место в файловой системе (в мегабайтах).

Высокие значения означают наличие свободного дискового пространства.

MBfsused

MB Filesystem Used

Используемое место в файловой системе (в мегабайтах).

Если значение приближается к общему объему диска, может потребоваться очистка.

%fsused

Percentage FS Used

Доля использованного пространства на файловой системе.

Если превышает 90%, возможны проблемы с хранением данных.

%ufsused

Percentage User FS Used

Процент используемого пользователем пространства.

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

Ifree

Inodes Free

Количество свободных inode.

Если значение близко к нулю, возможны проблемы с созданием новых файлов.

Iused

Inodes Used

Количество использованных inode.

Высокие значения могут указывать на систему с большим количеством мелких файлов.

%Iused

Percentage Inodes Used

Доля использованных inode в файловой системе.

Если приближается к 100%, возможны проблемы с файловой системой.


Заключение

В начале статьи мы упоминали список вопросов, на которые может ответить утилита sar из набора инструментов sysstat. И вот как именно.

Нагрузка на CPU

  1. Какова средняя загрузка процессора за последние часы/дни?

    • Команда: sar -u .

    • Метрики: %user, %system, %iowait, %steal, %idle .

    • Пример: sar -u показывает среднюю загрузку CPU за текущий день.

  2. Какие процессы потребляют больше всего ресурсов?

    • Команда: pidstat -u (не sar, но из пакета sysstat)

    • Метрики: %CPU для каждого процесса.

    • Пример: pidstat -u 1 3 покажет загрузку CPU конкретными процессами в реальном времени.

  3. Были ли моменты высокой нагрузки на CPU?

    • Команда: sar -u .

    • Метрики: %user, %system, %idle .

    • Пример: sar -u -f /var/log/sysstat/saXX поможет проанализировать исторические данные и найти пики нагрузки.

  4. Как распределена нагрузка между user, system, iowait, steal и idle?

    • Команда: sar -u .

    • Метрики: %user, %system, %iowait, %steal, %idle .

    • Пример: sar -u дает детальное распределение нагрузки.

Использование памяти

  1. Как изменялось использование RAM за день?

    • Команда: sar -r .

    • Метрики: %memused, kbmemfree, kbcached .

    • Пример: sar -r покажет изменения использования оперативной памяти за день.

  2. Был ли недостаток свободной памяти в определённое время?

    • Команда: sar -r .

    • Метрики: %memused, kbmemfree .

    • Пример: Если %memused > 90% или kbmemfree ≈ 0, это указывает на нехватку памяти.

  3. Какова нагрузка на swap?

    • Команда: sar -S .

    • Метрики: %swpused, kbswpused .

    • Пример: sar -S покажет использование подкачки. Высокое значение %swpused может указывать на проблемы.

Сетевой трафик

  1. Какой объем данных проходит через сетевые интерфейсы?

    • Команда: sar -n DEV .

    • Метрики: rxkB/s, txkB/s .

    • Пример: sar -n DEV показывает объем входящего (rxkB/s) и исходящего (txkB/s) трафика.

  2. Были ли пики сетевой активности?

    • Команда: sar -n DEV .

    • Метрики: rxkB/s, txkB/s .

    • Пример: Анализ графиков rxkB/s и txkB/s поможет выявить пики активности.

  3. Какой интерфейс нагружен больше всего?

    • Команда: sar -n DEV.

    • Метрики: rxkB/s, txkB/s.

    • Пример: Сравнение значений для разных интерфейсов (IFACE) покажет наиболее нагруженный.

Общая производительность системы

  1. Как изменилась производительность системы за прошедший период?

    • Команда: sar -A -f /var/log/sysstat/saXX.

    • Метрики: Все метрики, включая CPU, память, диски, сеть.

    • Пример: Полная сводка за день покажет тренды по всем ресурсам.

  2. Какие ресурсы работали на пределе возможностей?

    • Команда: sar -u, sar -r, sar -b, sar -n DEV.

    • Метрики: %idle (CPU), %memused (память), tps (диск), rxkB/s, txkB/s (сеть).

    • Пример: Низкое %idle или высокое %memused указывают на перегруженные ресурсы.

  3. Были ли моменты, когда система испытывала нехватку CPU, памяти или сетевых ресурсов?

    • Команда: sar -u, sar -r, sar -n DEV.

    • Метрики: %idle (CPU), %memused (память), rxkB/s, txkB/s (сеть).

    • Пример: Если %idle < 10% или %memused > 90%, это указывает на проблемы.

Автор: LadyLogic

Источник

Rambler's Top100