Перейти к основному содержимому

Диагностика производительности Linux

Разработчику Инженеру

Зачем эта статья

Когда хост или сервис тормозит, на машине уже есть встроенные средства — без установки агента и без доступа к исходникам приложения. Эта статья — практический runbook по SSH: что запустить, на что смотреть в выводе и куда копать дальше.

Постоянный мониторинг, алерты и baseline в Grafana — в 92 — мониторинг. Разбор конкретных инцидентов (сервис не отвечает, D-state, OOM) — в 9 — ошибки и логи. Справочник FHS, chmod и пакетные менеджеры — в 93. Базовые free, df, top — в напоминалке терминала.


Модель USE и порядок действий

Удобная схема для узкого места — USE (Brendan Gregg):

БукваСмыслВопрос
UUtilizationРесурс занят? (CPU %, %util диска)
SSaturationЕсть очередь? (load, await, swap in/out)
EErrorsОшибки в ядре, SMART, сеть?

Типичный порядок при жалобе «всё медленно» на одном сервере:

  1. Общая картина за несколько секунд — vmstat, sar или mpstat.
  2. Диск — iostat (высокий iowait в vmstat часто ведёт сюда).
  3. Память — /proc/meminfo, рост si/so в vmstat.
  4. Сеть и порты — ss, при конфликте порта — lsof.
  5. Сообщения ядра — dmesg (OOM, I/O error).
  6. Подозрительный процесс — /proc/<pid>/status, perf, strace.

Установка утилит

ПакетДистрибутивДаёт
sysstatDebian/Ubuntu: apt install sysstatsar, iostat, mpstat, pidstat
sysstatRHEL/Alma: dnf install sysstatто же
perflinux-tools-common + метапакет ядраperf top, perf record
straceобычно уже естьтрассировка syscall
lsofapt install lsof / в составе системыоткрытые файлы и сокеты

На Debian для sar по расписанию иногда нужно включить сбор: systemctl enable --now sysstat.


CPU

sar — срезы загрузки CPU

sar -u 1 5

Пять интервалов по одной секунде: удобно для скриптов и краткого снимка без интерактивного top. Смотрите %user, %system, %iowait (ожидание диска), `%steal (виртуализация).

История с прошлых дней (если включён sysstat):

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

mpstat и pidstat

По ядрам:

mpstat -P ALL 1 3

Кто грузит CPU:

pidstat -u 1 5

perf top — горячие функции процесса

perf top -p <pid>

Показывает стеки в реальном времени. Нужны права на трассировку (perf_event_paranoid, часто root). Для записи сессии — perf record -g -p <pid> и perf report (кратко также в 93).

Симптом в CPUКуда дальше
Высокий %iowaitДиск
Один процесс 90 %+perf top -p, pidstat
Много потоков, умеренный CPU/proc/<pid>/status, блокировки в приложении

Память

/proc/meminfo — детали от ядра

grep -E 'MemTotal|MemFree|MemAvailable|Cached|Dirty|Swap' /proc/meminfo

MemAvailable — ориентир «сколько можно выделить без агрессивного свопа»; для быстрой оценки информативнее, чем только MemFree. Dirty — страницы, ещё не сброшенные на диск; рост при тяжёлой записи. Полный справочник полей — 51 — /proc.

vmstat — своп, контекстные переключения, очередь

vmstat 1 5 -S M

Ключевые колонки (зависит от версии, смотрите заголовок):

  • si / so — swap in/out; устойчивый поток при наличии RAM — признак давления на память.
  • wa — ожидание I/O (аналог iowait).
  • cs — context switches; резкий всплеск вместе с ростом latency — перегруз или борьба за CPU.

Память одного процесса

grep -E 'VmRSS|VmSwap|Threads' /proc/<pid>/status
  • VmRSS — резидентная память в RAM.
  • VmSwap — сколько процесса ушло в swap.
  • Threads — число потоков (утечки потоков иногда маскируются под «утечку памяти»).

Утечки и OOM в сценариях — 9 — память и OOM.


Диск

iostat — I/O и загрузка устройств

iostat -xz 1

Флаги:

  • -x — расширенные поля (await, r/s, w/s).
  • -z — скрыть idle-устройства.
  • 1 — интервал в секундах.

На что смотреть:

ПолеИнтерпретация
%utilБлизко к 100 % — устройство насыщено
awaitСреднее время операции (мс); рост при нормальной нагрузке — bottleneck
avgqu-szДлина очереди к диску

Высокий %util при малом throughput иногда указывает на мелкий random I/O или проблемный диск — сверка с dmesg и SMART (см. 9 — аппаратная диагностика).

Дополнительно по процессам — iotop (пакет iotop).


Сеть и порты

ss — listening-порты и процессы

ss -tulpn | grep LISTEN

Аудит «что слушает хост», поиск лишних сервисов. Таблица сетевых команд — 6 — справочник при сбоях.

lsof — кто занял порт

lsof -i :8080

Классический ответ на address already in use. По PID — lsof -p <pid>.

Пропускная способность и задержки канала — iftop, nethogs, iperf36 и 9 — сценарий медленного сервиса).


Ядро — dmesg

dmesg -T | grep -E 'OOM|kill|error|I/O' | tail -20

Флаг -T — человекочитаемое время. Здесь же — OOM killer, ошибки диска, сбои драйверов. Для служб с journal — journalctl -k --since "1 hour ago".

Сообщения ядра и логи приложения

dmesg фиксирует то, что сообщило ядро. Ошибки уровня HTTP, SQL или бизнес-логики ищите в journalctl -u … и файлах в /var/log/ — см. 9.


Отладка процесса без исходников

strace — системные вызовы

strace -p <pid> -e trace=network -T
  • -p — подключиться к работающему процессу.
  • -e trace=network — только сетевые syscall (сокеты, connect, send).
  • -T — время на каждый вызов.

Другие полезные фильтры: openat, read, write, futex. Вывод в файл: strace -o trace.log -f ./app.

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

strace и perf замедляют процесс. На боевом трафике сначала снимите метрики (pidstat, vmstat), затем краткую трассировку с ограничением по времени или на копии нагрузки в staging.

perf top — CPU hotspots

См. раздел CPU. Для Java/.NET есть свои инструменты (jstat, dotnet-counters) — в 9 — диагностика по приложению.


Сводная таблица команд

РесурсКомандаЗачем
CPUsar -u 1 5, mpstat -P ALL 1Загрузка, iowait
CPU (процесс)perf top -p <pid>Горячие функции
Памятьgrep … /proc/meminfoAvailable, dirty, swap
Память (динамика)vmstat 1 5 -S MSwap, wait, cs
Память (процесс)grep … /proc/<pid>/statusRSS, swap, threads
Дискiostat -xz 1util, await, очередь
Сетьss -tulpnListening-порты
Портlsof -i :<port>Конфликт порта
Ядроdmesg -T + grepOOM, I/O errors
Процессstrace -p <pid> …Зависания, сеть, файлы

Когда CLI недостаточно

СитуацияСледующий шаг
Нужен тренд за неделю92 — метрики и мониторинг, Prometheus/node_exporter
Распределённая системаТрассировка (OpenTelemetry, Jaeger), correlation ID в логах — 9 — сценарий latency
Только один запрос тормозитЛоги приложения, профилировщик языка, БД (EXPLAIN, slow query)
Хост в облакеМетрики провайдера + те же команды на ВМ

Дальше

ЦельМатериал
Типовые инциденты и runbook9
Сеть, curl, tcpdump6
/proc, sysctl51
Мониторинг и алерты92
Права, systemd, пакеты93
Чек-лист раздела99

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").

📄️Сетевые аномалии и системные процессы

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