# Утилита для контроля нагрузки и процессов atop Основным преимуществом утилиты atop является //функция ведения логов//. Благодаря этому можно не только контролировать нагрузку в текущий момент, но и отслеживать работу процессов за прошедшие дни, чтобы диагностировать плавающие ошибки, которые сложно «поймать» при мониторинге в реальном времени. Утилита atop не идет предустановленной и её необходимо установить на сервер. Для Debian / Ubintu: ```bash apt install atop -y ``` Также рекомендуется добавить atop в автозагрузку: ```bash systemctl enable atop ``` Запускается утилита командой: ``` atop ``` и в результате получается вывод, который выглядит примерно так: {{:linux:atop.jpg?direct&600|}} В верхней части отображается информация о системе и нагрузке на ключевые компоненты: процессор, ядра, память, сеть. Ниже выводится список процессов. ## Описание колонок в информационном выводе atop ### Статистика процессов **PRC** (**Process Information**) — статистика процессов: * **sys** — время, затраченное процессами в режиме ядра; * **user** — время, затраченное процессами в режиме пользователя; * **proc** — общее количество процессов в системе; * **trun** — количество процессов, находящихся в состоянии выполнения; * **tslpi** — количество процессов, ожидающих ресурсов в спящем режиме; * **tslpu** — количество процессов, ожидающих ресурсов в интерактивном режиме; * **tidle** — количество процессов, находящихся в состоянии простоя; * **zombie** — количество процессов-зомби; * **clones** — количество процессов, созданных с момента последнего замера; * **exit** — количество завершенных процессов. ### Статистика производительности **CPU** (**CPU Utilization**) — статистика производительности: * **sys** — использование процессора в режиме ядра (системные задачи); * **user** — использование процессора в режиме пользователя; * **irq** — использование процессора на обработку прерываний; * **idle** — время простоя процессора; * **wait** — время ожидания ввода/вывода; * **steal** — время, украденное гипервизором; * **ipc** — количество инструкций на такт; * **cycl** — средняя тактовая частота; * **curf** — текущая частота процессора. ### Статистика загрузки процессора **CPL** (**CPU Load**) — статистика загрузки процессора: * **numcpu** — количество доступных CPU; * **avg1/avg5/avg15** — средняя загрузка системы за последние 1, 5 и 15 минут; * **csw** — количество переключений контекста; * **intr** — количество аппаратных прерываний. ### Статистика памяти **MEM** (**Memory Usage**) — потребление памяти: * **tot** — общий объем памяти; * **free** — свободная память; * **avail** — доступная память; * **cache** — используемая память под кеш; * **dirty** — объем данных в памяти, которые должны быть записаны на диск; * **slab** — объем памяти, используемой под SLAB-кеш; * **shmem/shrss/shswp** — объем используемой общей памяти (shared memory); * **pgtab** — используемая память под таблицы страниц. ### Статистика использования swap-памяти **SWP** (**Swap Usage**) — использование swap-памяти: * **tot** — общий объем свопа; * **free** — свободный объем свопа; * **swcac** — объем памяти, кешируемой в свопе; * **zswap/zstor** — объем памяти в zswap/zstor; * **vmcom** — используемая виртуальная память; * **vmlim** — лимит виртуальной памяти. ### Статистика виртуальной памяти **PAG** (**Paging**) — частота подкачки страниц: * **scan/steal/stall/compact** — данные по работе системы виртуальной памяти (сканирование страниц, перехваты, остановки, компактирование); * **pgin/pgout** — количество страниц, записанных в память/выгруженных из нее; * **numamig/migrate** — данные по миграции страниц в NUMA; * **oomkill** — количество завершений процессов из-за недостатка памяти. ### Статистика давления на CPU **PSI** (**Pressure Stall Information**) — информация о снижении давления в системе: * **cpusome/memsome/memfull/iosome/iofull** — метрики давления на CPU, память и ввод/вывод. ### Управление логическими томами **LVM** (**Logical Volume Management**) — управление логическими томами: * **busy** — уровень загрузки тома; * **read/write** — количество операций чтения/записи; * **discrd** — количество операций сброса данных; * **KiB/r/KiB/w** — средний размер операций чтения/записи в килобайтах; * **MBr/s/MBw/s** — скорость чтения/записи; * **avio** — среднее время ввода/вывода. ### Статистика дисков **DSK** (**Disk Usage**) — статистика дисков: * аналогичные параметры для физических дисков. ### Сетевая статистика **NET** (**Network Usage**) — сетевая статистика: * **tcpi/tcpo/udpi/udpo** — статистика по TCP/UDP трафику; * **pcki/pcko** — количество входящих/исходящих пакетов; * **sp** — пропускная способность; * **si/so** — скорость приема/передачи данных. ## Анализ статистики atop На что следует обратить внимание при анализе данных: |№|Параметр|Значение| |:---|:---:|:---| |1.|CPU:|высокий sys, irq и низкий idle указывают на системные проблемы;| |::: |::: |wait > 0% может свидетельствовать о задержках ввода/вывода.| |2.|MEM:|высокий dirty и низкий free указывают на потенциальные задержки при записи данных на диск;| |::: |::: |проверить использование кеша и slab-кеша.| |3.|SWP:|высокое использование свопа (free близко к 0) может привести к замедлению системы.| |4.|PAG:|большое количество scan и steal указывает на перегрузку системы управления памятью.| |5.|DSK:|высокий busy (>90%) и большое время avio указывают на проблемы с производительностью дисков.| |6.|NET:|проверить si и so на наличие узких мест в сети. Высокие erri и erro указывают на ошибки в сети.| |7.|PSI:|значения cpusome, memsome, iosome выше 10% сигнализируют о перегрузке ресурсов.| |8.|CPL:|средняя нагрузка (avg1, avg5, avg15) выше числа ядер (numcpu) указывает на перегрузку.| Анализ каждого раздела производится в контексте специфики нагрузки и ожидаемой производительности. ## Дополнительная информация о процессах Общий вывод команды atop содержит дополнительную информацию для каждого запущенного процесса: |Идентификатор|Значение| |:---:|:---| |PID | идентификатор процесса;| |RUID | реальный идентификатор пользователя, от имени которого выполняется процесс;| |EUID | эффективный идентификатор пользователя, под которым выполняется процесс;| |THR | общее количество потоков для процесса;| |SYSCPU | потребление CPU за последний интервал в режиме system. (обычно системные вызовы);| |USRCPU | потребление CPU за последний интервал в режиме user;| |VGROW | рост виртуальной памяти в течении последнего интервала;| |RGROW | резидентный (реальный, занятый процессом ОП) рост памяти в течении последнего интервала. Может быть отрицательным, если процесс выгружается из памяти в swap;| |RDDSK | размер переданных данных при чтении с диска;| |WRDSK | празмер переданных данных при записи на диск;| |ST | текущий статус процесса (N в первой позиции говорит, что процесс был запущен во время последнего интервала. Вторая позиция показывает закончился ли процесс за время последнего интервала: E — exit, S - прекращено, C - прекращено но остался core dump);| |EXC | код завершения процесса;| |S | состояние процесса (S=sleep (ожидает событий), R=running (работает), Z=zombie (ожидает родительский процесс);| |CPUNR | идентифицирует CPU который обрабатывает процесс;| |CPU | процент занятости выбранного ресурса;| |CMD | имя процесса.| ## Управление Для управления выводом используются: |Клавиши|Значение| |:---|:---| |m |сортировка по используемой памяти| |d |сортировка по нагрузке на диск| |u |нагрузка по пользователям| |v |подробная информация по процессам| |i |изменение интервала обновления данных (по умолчанию 10 секунд)| |g |вернуть вывод по умолчанию| |n |сортировка процессов по нагрузке на сеть (доступна при наличии установленного патча ядра)| Сочетания клавиш с Shift выстроят //текущий список процессов по соответствующим параметрам//: |Сочетание|Значение| |:---|:---| |Shift + m |сортировка процессов памяти| |Shift + с |сортировка по потреблению CPU (по умолчанию)| |Shift + d |сортировка по использованию диска| |Shift + n |сортировка по использованию сети| ## Логи atop По умолчанию atop собирает сведения о состоянии системы каждые 10 минут и сохраняет их в файл лога, располагающийся в директории `/var/log/atop`. Чтобы просмотреть лог за сегодня, выполните: ``` atop -r ``` Просомотром можно управлять с помощью клавиш: * t — перейти вперед по времени * Shift + t — перейти назад по времени Файл за конкретный день имеет имя `atop_ГГГГММДД`. Чтобы просмотреть лог за нужный день, используйте команду `atop -r` и укажите путь к файлу, например: ``` atop -r /var/log/atop/atop_20250227 ``` Изменить настройки ведения лога можно в конфигурационном файле atop, который размещается по пути `/etc/default/atop`: ``` # Интервал создания снимка нагрузки сервера, в секундах: LOGINTERVAL=600 # Срок хранения логов LOGGENERATIONS=28 # Путь к директории с логами: LOGPATH="/var/log/atop" # Имя файла логов OUTFILE="$LOGPATH/daily.log" ``` Например, для того, чтобы atop делал снимок нагрузки раз в минуту, а не раз в 10 минут, следует указать LOGINTERVAL=60 Настроить ротацию логов можно, изменив значение LOGGENERATIONS. Это значение определяет срок хранения логов. Например, если указано значение 2, в /var/log/atop будет храниться три файла: один с логами за текущий день и два других за два предыдущих дня. После внесения изменений в файл конфигурации следует перезапустить atop: ``` systemctl restart atop.service ```