Измерение и устранение проблем с ресурсами [200.1]

Рейтинг: 79.6% · 15 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Измерение и устранение проблем с ресурсами [200.1]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1] (вы здесь)
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2]
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 1. Измерение и устранение проблем с ресурсами [200.1]

Сервер тормозит, а пользователи пишут гневные тикеты - и задача администратора не угадать, а доказать цифрами, где именно затык: процессор, память, диск или сеть. В этом уроке мы разберём, какие метрики ядро Linux отдаёт наружу, как их читать инструментами из пакета sysstat и соседями (top, ss, lsof, iotop), и по какому алгоритму локализовать узкое место, не переустанавливая сервер наугад.

Изображение

Как это работает

Ядро ведёт счётчики использования ресурсов и публикует их через виртуальные файловые системы /proc и /sys. Почти все утилиты мониторинга - это просто красивые читалки этих файлов. Например, load average берётся из /proc/loadavg, статистика по CPU - из /proc/stat, по памяти - из /proc/meminfo, а по конкретному процессу - из /proc/PID/. Понимание этого избавляет от магии: если утилита показала странное, можно пойти в первоисточник.

Ключевая идея диагностики - разделять моментальный снимок и динамику. top и free показывают состояние сейчас, а vmstat, iostat, mpstat с интервалом (например, каждые 2 секунды) показывают тренд. Первая строка вывода многих утилит sysstat - это среднее с момента загрузки, поэтому её почти всегда игнорируют и смотрят на последующие.

Load average - это не загрузка процессора в процентах, а среднее число процессов, которые работают или ждут (в Linux сюда входит и ожидание диска, состояние D - uninterruptible sleep). Три числа - среднее за 1, 5 и 15 минут. Если la выше числа ядер, очередь растёт. Но la=8 на 16-ядерной машине - это норма, а на 4-ядерной - перегрузка. Поэтому всегда делите la на nproc.

Для памяти важно не пугаться маленького свободного значения: Linux намеренно занимает свободную RAM под кэш страниц (buff/cache), чтобы ускорять чтение с диска. Реальный показатель нехватки памяти - это рост swap-активности (si/so в vmstat) и срабатывание OOM killer, а не низкий free.

Узкое место по вводу-выводу выдаёт колонка wa (iowait) в top/vmstat и параметр %util в iostat: если диск занят почти 100% времени и очередь к нему растёт, процессор простаивает в ожидании. Сетевой затык ищут через ss (состояния соединений, переполнение очередей accept) и счётчики ошибок интерфейсов.

Команды и примеры

Установка пакета sysstat - он даёт vmstat-соседей iostat, sar, mpstat, pidstat:

Код: Выделить всё

# Debian 13 / Ubuntu 24.04
sudo apt install sysstat
# RHEL 10 / Fedora 41+
sudo dnf install sysstat
# Включить фоновый сбор истории (sar)
sudo systemctl enable --now sysstat
Быстрый общий взгляд - uptime и free. Ключ -h даёт человекочитаемые единицы, -w разносит buffers и cache:

Код: Выделить всё

uptime
free -h -w
vmstat с интервалом 2 секунды, 5 замеров. Смотрим колонки: r (очередь на CPU), b (заблокированы на IO), si/so (swap in/out), wa (iowait), us/sy (user/system CPU):

Код: Выделить всё

vmstat 2 5
iostat по устройствам, расширенный вывод. -x даёт %util и await (время отклика запроса в мс), -d только диски, -h человекочитаемо:

Код: Выделить всё

iostat -xh 2
mpstat показывает загрузку по каждому ядру отдельно - так видно перекос, когда одно ядро в полке, а остальные спят (типично для однопоточной нагрузки):

Код: Выделить всё

mpstat -P ALL 2
pidstat ищет процесс-виновника. По CPU, по памяти (-r), по диску (-d):

Код: Выделить всё

pidstat 2        # CPU по процессам
pidstat -r 2     # память (minflt/majflt, RSS)
pidstat -d 2     # дисковый IO по процессам
sar читает накопленную историю - можно посмотреть, что было ночью во время инцидента. -u CPU, -r память, -b IO, -n DEV сеть:

Код: Выделить всё

sar -u 1 3              # CPU в реальном времени
sar -r -f /var/log/sysstat/sa13   # память за 13-е число месяца
Сеть и сокеты - ss заменил устаревший netstat. Сводка, слушающие порты, переполнение accept-очереди:

Код: Выделить всё

ss -s              # сводка по сокетам
ss -tlnp           # TCP listen, без резолва, с процессами
ss -tin            # детали TCP: rtt, cwnd, retrans
Кто держит файл или порт - lsof. iotop показывает live дисковый IO по процессам (нужен root):

Код: Выделить всё

sudo lsof -i :443          # кто слушает/держит порт 443
sudo lsof /var/log/app.log # кто открыл файл
sudo iotop -oP             # только активные, по процессам
top для интерактива, но htop удобнее (дерево процессов, фильтры, убийство по F9):
Частые грабли
  • Принимать load average за проценты загрузки CPU. Это длина очереди, и в неё входит ожидание диска - высокий la при простаивающем процессоре почти всегда означает проблему с IO, а не с CPU.
  • Пугаться низкого free и докупать память, хотя её съел кэш страниц. Смотрите на колонку available в free, а не на free, и на swap-активность.
  • Читать первую строку iostat/mpstat/pidstat как текущее значение - это среднее с момента загрузки. Реальные данные начинаются со второго интервала.
  • Запускать iostat без -x и не видеть %util и await - без них невозможно отличить занятый диск от медленного.
  • Забыть включить службу sysstat - тогда sar не накопит историю и разобрать ночной инцидент постфактум не выйдет.
  • Путать iowait с нагрузкой на CPU: высокий %wa означает, что процессор простаивает в ожидании диска, а не работает.
  • Использовать netstat по привычке - на минимальных образах его уже нет, нужен ss.
Мини-лаба
  • Установите sysstat и включите службу сбора истории, проверьте, что появляются файлы в /var/log/sysstat (или /var/log/sa).
  • Создайте искусственную нагрузку на CPU: запустите stress-ng --cpu 2 --timeout 30s (или yes > /dev/null в фоне на 2 терминала) и в другом окне смотрите mpstat -P ALL 2 - найдите загруженные ядра.
  • Создайте нагрузку на диск: dd if=/dev/zero of=/tmp/testfile bs=1M count=2000 oflag=direct и параллельно смотрите iostat -xh 2 - зафиксируйте %util и await целевого устройства.
  • Запустите pidstat -d 2 и убедитесь, что виновник записи - ваш процесс dd.
  • Через ss -tlnp найдите все слушающие TCP-порты на стенде и через lsof -i :PORT определите процесс одного из них.
  • Удалите тестовый файл, через sar -u и sar -b посмотрите, остался ли след нагрузки в истории.
Контрольные вопросы
  • Из каких файлов /proc утилиты берут load average, статистику CPU и памяти?
  • Чем колонка available в free принципиально отличается от free и почему именно её надо смотреть?
  • Какие колонки vmstat и iostat указывают на узкое место по дисковому вводу-выводу?
  • Почему первую строку вывода iostat и mpstat обычно игнорируют?
  • Какой утилитой и как определить процесс, который генерирует основную дисковую запись?
  • Чем ss лучше netstat и как через него увидеть переполнение accept-очереди сокета?
👍3 ❤️2 🔥2 😄 🤔
Аватара пользователя
kolya42
Сообщения: 1
Зарегистрирован: 17 май 2026, 23:25

Re: Измерение и устранение проблем с ресурсами [200.1]

Сообщение kolya42 »

Долго не мог понять, почему la=12 а top показывает CPU почти простаивает. Оказалось весь la из-за процессов в D-state на медленном NFS. iostat -x сразу всё показал.
👍1 ❤️1 🔥2 😄 🤔
Аватара пользователя
thrush
Сообщения: 1
Зарегистрирован: 12 май 2026, 12:56

Re: Измерение и устранение проблем с ресурсами [200.1]

Сообщение thrush »

А правда что iotop без рута молчит? У меня показывает только нули, пока не запустил через sudo - тогда видно кто диск насилует.
👍1 ❤️1 🔥1 😄 🤔1
Ответить
← Предыдущая глава
Введение в LPIC-2 и уровень инженера
Следующая глава →
Прогнозирование потребности в ресурсах

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость