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

Advanced

load average

Описание

load average - среднее количество задач, которые выполняются, готовы выполняться на CPU или находятся в непрерываемом сне (обычно ожидание I/O)

То есть учитываются не только процессы оидающие процессор

Например:

  • Процесс выполняется на CPU - учитывается.

  • Процесс готов выполняться, но ждет свободный CPU - учитывается

  • Процесс находится в состоянии D, например ожидает дисковую операцию - тоже учитывается.

  • Процесс спит в состоянии S, ожидая события - обычно не учитывается.

Почему 16.5 при 8 CPU - повод проверить сервер

Например

load average: 16.50, 14.20, 12,80
nproc:8

Высокий Load Average не доказывает перегрузку процессора. Причиной может быть, например, большое количество процессов в состоянии D из-за проблем с дисковой подсистемой.

htop

С ее помощью можно посмотреть:

  • CPU - загрузку каждого логического процессора

  • MEM - использование оперативной памяти.

  • SWAP - использование подкачки

  • Processes - процессы, потребляющие ресурсы

  • Process state - состояние процессов (R, S, D и другие)

Нюансы htop

htop не дает полной картины дисковой подсистемы. Для диагностики I/O нужны дополнительные инструменты.

Потребление ресурсов процессами

Например в списке процессов:

PID   USER S CPU%   MEM% COMMAND
2451  app  R 780.0  4.2  python3

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

При восьми логический CPU:

  • 100% - примерно один полностью загруженный логический CPU

  • 400% - эквивалент четырех полностью загруженных CPU

  • 780% - эквивалент 7,8 загруженного CPU

Состояние R

R - Running или Runnable

Задача либо выполняется на процессоре, либо готова к выполнению и ожидает CPU.

Это не означает, что процесс работает в режиме реального времени.

Как диагностировать?

  1. Определить, что за процесс
ps -fp 2451
  1. Посмотреть нагрузку по потокам
top -H -p 2451
  1. Проверить логи приложения

journalctl -u myapp.service -n 100

Memory

free -h

Пример:

               total   used   free   shared  buff/cache  available
Mem:            32Gi   28Gi   1Gi     1Gi       3Gi       3Gi
Swap:            8Gi    2Gi   6Gi

free - свободная память

available - память. которую Linux оценивает как доступную для запуска новых приложений без активного использования Swap

Пример:

free = 1 Gib - память, которая сейчас вообще не занята.

available = 3 Gib - примерно столько памяти система может предоставить приложениям, в том числе освободив часть кеша.

Поэтому маленькое значение free само по себе не означает нехватку памяти.

Swap

  • позволяет Linux размещать некоторые страницы памяти вне оперативной памяти (нкпиотель)
vmstat 1
Столбец Значение
si Данные, считываемые из swap в RAM
so Данные, записываемые из RAM в Swap

OOM Killer (Out of Memory Killer)

  • механизм ядра Linux, который завершает процессы при критической нехватке памяти.
Out of memory: Killed process 2451 (python3)

Это означает что ядро выбрало процесс python3 с PID 2451 и принудительно завершило его.

Полезные команды

Команда Для чего
free -h Проверить текущее использование RAM и Swap
ps aux --sort=-%mem Найти процессы с высоким потреблением памяти
journalctl -k Посмотреть сообщения ядра об OOM
systemctl status myapp Проверить состояние приложения, если оно запущено через systemd
vmstat 1 Посмотреть динамиу памяти и подкачку

Systemd

Например:

systemctl status myapp.service
● myapp.service - Python Application
     Loaded: loaded (/etc/systemd/system/myapp.service; enabled)
     Active: failed (Result: exit-code)
    Process: 1234 ExecStart=/usr/bin/python3 /opt/myapp/app.py
   Main PID: 1234 (code=exited, status=1/FAILURE)

enabled означает, что сервис настроен на автоматический запуск при достижении соответствующей цели systemd, обычно во время загрузки Linux

Active: failed - systemd считает запуск или работу сервиса завершившимися с ошибкой.

Main PID: 1234 - идентификатор основного процесса приложения.

status=1/FAILURE - процесс завершился с кодом возврата 1, что обычно означает ошибку.

Просмотр логов

Посмотреть последние 100 записей журнала сервиса

journalctl -u myapp.service -n 100 --no-pager

Посмотреть в реальном времени:

journalctl -u myapp.service -f

Перечитывание конфигурации unit-файлов systemd

sudo systemctl daemon-reload

Есть три операции:

Команда Назначение
systemctl daemon-reload Перечитать unit-файлы systemd
systemctl reload myapp Попросить работающий сервис перечитать собственную конфигурацию, если он поддерживает reload
systemctl restart myapp Перезапустить сервис

Последняя проверка 14.10.2026