Top.Mail.Ru
Зарегистрироваться8 (800) 350-01-20

Мониторинг потребления ресурсов в Ubuntu 24

Мониторинг ресурсов в Ubuntu 24

Содержание:

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

Мониторинг нагрузки центрального процессора

Отслеживание процессов при помощи утилиты ps

Мониторинг процессов является одним из лучших способов как выявить причину загрузки системы, так и определить нежелательные из них. С точки зрения операционной системы, процесс - это запущенный экземпляр программы, потребляющий ресурсы системы. Каждый процесс в Unix-like системах имеет ряд атрибутов:

  • Идентификатор процесса (PID) - номер, уникальный для каждого процесса;
  • идентификатор родительского процесса (PPID) - номер процесса, который "породил" текущий процесс.
  • Поправка приоритета (NI) – относительный приоритет процесса, учитываемый планировщиком при определении очерёдности запуска;
  • Терминальная линия (TTY) – терминал или псевдотерминал, связанный с процессом или в котором он запущен;
  • Реальный (GID) и эффективный (EGID) идентификаторы группы – реальный идентификатор группы равен идентификатору основной или текущей группы пользователя, запустившего процесс. Служит для определения прав доступа к системным ресурсам от имени группы.

Для всех процессов в Linux родительским является процесс init - его идентификатор (PID) равен 1. В случае, если процесс утрачивает "родителя" (то есть, процесс, породивший текущий, по тем или иным причинам завершился), то он переходит под управление init.

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

  • A/e : показывает все процессы;
  • a : отображает только те, что связанны с конкретным терминалом, кроме главных системных процессов сеанса.  Одна их самых часто используемых опций;
  • p: выводит только перечисленные процессы (следом указывается один или несколько PID);
  • T : все процессы на конкретном терминале;
  • a : процессы, связанные с текущим терминалом, а также процессы других пользователей;
  • r : информация только о работающих процессах;
  • x : процессы, не привязанные к терминалу;
  • u : показывает процессы, принадлежащие конкретному пользователю;

Для того, чтобы просмотреть список процессов, выполните в терминале команду ps <опции> <параметры_опций>

Анализ вывода команды ps

При выполнении команды ps с различными опциями будет выводиться таблица со списком процессов:

 

Столбцы в этой таблице обозначают следующее:

  • USER - имя пользователя, от имени которого запущен процесс;
  • PID - идентификатор процесса;
  • %CPU  и %MEM  - потребление процессора и оперативной памяти соответственно (в процентах);
  • VSZ - Количество выделенной виртуальной памяти в килобайтах;
  • RSS - Объем используемой физической памяти;
  • TTY - терминал, к которому привязан процесс;
  • STAT - состояние процесса;
  • START - время начала работы процесса;
  • TIME - Время CPU, которое было потреблено этим процессом;
  • COMMAND (CMD) - команда, которой был запущен процесс.

Параметр STAT может принимать следующие значения:

  • D: непрерывный сон, uninterruptible sleep (обычно отосится к вводу/выводу).
  • I: поток ожидания ядра (Idle kernel thread).
  • R: работающий, или в готовности к переходу в это состояние, running или runnable (на очереди планировщика, run queue).
  • S: прерываемый сон, interruptible sleep (ожидание завершения события).
  • T: остановлен синалом управления (job control signal).
  • t: остановлен отладчиком во время трассировки.
  • X: завершенный или "мертвый" процесс (никогда не должно отображаться).
  • Z ("zombie"): процесс, который  завершен, но не подтвержден со стороны родительского процесса. Это выражается в том, что процесс, при завершении, освобождает все занимаемые им ресурсы, но не PID. Его может удалить только родительский процесс.

В случае, если команда ps была запущена без опций или же если с флагом -u и указанием имени пользователя, то набор столбцов в результирующей таблице будет отличаться: ps -u <имя_пользователя>

  • PID - идентификатор процесса;
  • TTY - терминал, к которому привязан процесс;
  • TIME - Время CPU, которое было потреблено этим процессом;
  • CMD - команда, которой был запущен процесс.

Остановка процессов

Если вы обнаружили в системе процесс, который хотели бы остановить вручную, то вы можете поступить несколькими способами:

  • Выполнить "мягкую" остановку процесса: в этом случае он полностью завершит все операции, освободит все ресурсы и завершится сам. На практике это может выражаться в том, что процесс при "мягкой остановке", если он выполнял операции чтения/записи, полностью их завершит, а только потом завершится. Это может помочь сохранить целостность файлов, с которыми взаимодействуют процессы. Остановить процесс "мягко" можно при помощи команды sudo kill <PID_процесса>. По умолчанию, утилита отправит сигнал SIGTERM, и процесс начнет процедуру завершения. Пример "мягкого" завершения процесса nano:
  • Выполнить "грубую" остановку процесса: в этом случае процесс будет остановлен экстренно, без завершения своих операций. Возвращаясь к примеру из предыдущего пункта, процесс не завершит операции ввода/вывода, что может сказаться как на целостности информации, хранящейся в файлах, с которыми он взаимодействует. Для "грубой" остановки процесса выполните команду sudo kill -s 9 <PID_процесса>, где 9 - это номер сигнала, ответственного за немедленное завершение процесса (SIGKILL). Пример "грубой" остановки процесса nano:

Использование утилиты top

Просматривать запущенные процессы можно и в более интерактивном режиме: для этого в Ubuntu 24 есть встроенная утилита top. Она выводит список всех процессов, запущенных в системе, и позволяет его фильтровать по потреблению ресурсов,  а также общую загрузку CPU и RAM в системе. Запустить утилиту можно командой top. В результате откроется окно с информацией о потреблении ресурсов сервером и списком процессов.

Для фильтрации процессов доступны следующие опции (или флаги):

  • -i – не отображать процессы, которые не используют ресурсы процессора
  • -c – отображать полный путь до к исполняемым файлам(можно использовать, как горячую клавишу, чтобы изменять отображение внутри top)
  • -u – отображать процессы, запущенные конкретным пользователем
  • -p <PID> – отслеживать конкретный процесс по его id

Также для поиска процесса внутри самого окна top доступны горячие клавиши:

  • M – сортировка по используемой процессом оперативной памяти
  • o – поиск по значению окна процессов

Пример фильтрации запросов через горячую клавишу o и имени процесса fsftpd:

Использование утилиты htop:

htop - это более интерактивный и наглядный инструмент для мониторинга загрузки системы. Является альтернативой top, предоставляет улучшенный интерфейс, позволяет выполнять сортировку по нажатию на соответствующий параметр.

Программа вывод следующий список параметров процесса:

  • PID — номер процесса.
  • USER — имя пользователя под которым работает процесс.
  • PRI — приоритет процесса.
  • NI — любезность процесса (чем она выше, тем ниже приоритет).
  • VIRT — количество памяти, которое способен адресовать процесс. Включает выделенную память, которая, возможно, ещё не полностью используется.
  • RES — количество физической памяти (использованной а не выделенной), которую использует процесс.
  • SHR — количество разделяемой памяти, которую использует процесс. Разделяемая память может использоваться вместе разными процессами.
  • S — состояние процесса
  • CPU% — использование CPU в процентах;
  • MEM% — использование RES в процентах;
  • TIME+ — сколько времени этот процесс работал на ЦПУ, с точностью до сотых долей секунды;
  • COMMAND — с помощью какой команды запустили процесс.

Для фильтрации процессов доступны следующие флаги(опции):

  • -u — показать процессы, запущенные определенным пользователем
  • -d <значение> — задержка, в десятых долях секунды. Позволяет указать обновляться утилите спустя заданное время
  • -F <значение> — показать процессы, поле COMMAND, которых, совпадает с параметром
  • -p — фильтр по PID процессов, можно задать несколько процессов через запятую

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

Мониторинг оперативной памяти (RAM)

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

Out-Of-Memory

OOM Killer – это механизм ядра Linux, который принудительно завершает работу процесса/процессов, которые имеют наибольший счёт («Score»), отправляя процессу сигнал SIGKILL, который является «грубой» остановкой работы процесса. Если произошло неожиданное завершение работы программы, с помощью вывода логов Out-Of-Memory можно увидеть, был ли завершён процесс из-за нехватки оперативной памяти в системе с помощью исследования логов OOM Killer. Для того, чтобы определить процессы, завершенные из-за нехватки памяти, выполните следующую команду cat /var/log/syslog | grep ‘out of memory’

Сообщение о завершении процесса в связи с OOM выглядит следующим образом: kernel:out of memory: Kill process 6234 (program) score 655

Счетчик OOM Score присваивается каждому процессу в системе. Чтобы изменить счётчик OOM необходимо выполнить команду echo «значение от -1000 до 1000» > proc/<pid>/oom_adj

использование утилиты free

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

С помощью вывода данной программы можно увидеть общую информацию по использованию оперативной памяти системы, в том числе, использование файла подкачки. Для того, чтобы отслеживать нагрузку на оперативную память в режиме реального времени, используйте фаг –s <кол-во секунд>. После флага –s указывается периодичность обновления free. free -h -s <количество_секунд>

Отслеживание потребление оперативной памяти при помощи утилит Ps, top, htop

Разобранные, в разделе мониторинга нагрузки процессора, утилиты также позволяют работать с оперативной памятью, сортируя процессы. Для того, чтобы просмотреть потребление процессами оперативной памяти при помощи утилиты ps, выполните следующую команду ps aux --sort=-%mem

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

Для сортировки вывода вtop используется горячая клавиша «M»

Для сортировки вывода в htop используется следующая комбинация:F6 -> sort by PERCENT_MEM или с помощью нажатия ЛКМ на столбец MEM%

Мониторинг нагрузки на диск

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

Основные характеристики для изучения нагрузки на диск – это текущая утилизация IOPS ОС (Input/Output Per Second), IO Latency (задержка до дисковой подсистемы), текущий объём обрабатываемых данных, процессы, нагружающие дисковую подсистему

IOPS – количество блоков, которые носитель информации успевает прочитать или записать в секунду. Чем выше IOPS, и ниже задержки, тем «быстрее» диск обрабатывает информацию, что может быть критично, например, для баз данных и других программ, требующих быстрой работы дисковых подсистем.

Мониторинг потребления IOPS при помощи утилиты iotop

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

В случае отсутствия утилиты в системе, загрузите её из официальных репозиториев Ubuntu с помощью sudo apt install iotop

Для того, чтобы запустить утилиту, выполните команду sudo iotop

Здесь, можно увидеть следующие параметры диска, указанные в соответствующих столбцах результирующей таблицы:

  • TID – Thread ID
  • PRIO - приоритет ввода/вывода
  • USER  - пользователь, запустивший процесс
  • DISK READ - Скорость ввода/вывода при операциях чтения
  • DISK WRITE - Скорость ввода/вывода при операциях записи
  • COMMAND (CMD) - команда, которой был запущен процесс.

Параметр PRIO делится на классы:

  • RealTime – Процесс будет иметь наивысший приоритет выполнения операций ввода/вывода, имеет 8 уровней приоритета (0-7), наименьшее значение = наивысший приоритет
  • Best-Effort – класс по умолчанию, также имеет 8 уровней приоритета (0-7)
  • Idle  – наименьший приоритет, процессы класса Idle будут выполнять операции, когда диск не занят никакими другими операциями процессов уровня выше

Для того, чтобы увидеть объем, который процесс обработал на текущий момент, используйте флаги –ao: sudo iotop -ao

Мониторинг потребления IOPS при помощи утилиты htop I/O

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

В текстовом интерфейсе программы можно увидеть следующие параметры:

  • USER - имя пользователя, от имени которого запущен процесс;
  • PID - идентификатор процесса;
  • IO  - Класс планирования ввода/вывода процесса, определяющий его приоритет доступа к диску
  • DISK R/W - Класс планирования ввода/вывода процесса, определяющий его приоритет доступа к диску
  • DISK READ - Скорость ввода/вывода при операциях чтения
  • DISK WRITE - Скорость ввода/вывода при операциях записи
  • SWPD% - процент времени, затраченный на подкачку страниц
  • IOD% - процент времени, затраченный на ожидание завершения ввода/вывода процессами
  • COMMAND (CMD) - команда, которой был запущен процесс.

Использование утилиты lsof

Для того, чтобы обнаружить, в какую директорию выполняет операцию тот или иной процесс, можно использовать утилиту lsof. Для того, чтобы увидеть все файлы, открытые конкретным процессом, введите команду lsof –i <pid>

Вывод  утилиты включает в себя, таблицу, состоящую их следующих полей:

  • COMMAND (CMD) - команда, которой был запущен процесс.
  • PID - идентификатор процесса;
  • USER  – Пользователь, которым был запущен процесс
  • FD – Файловый дескриптор
  • TYPE – Тип сокета, связанный с файлом (например, IPv6 сокет, Обычный файл/REG, Директория/DIR)
  • DEVICE – номер устройства
  • SIZE/OFF – размер файла или смещение
  • NODE – номер индексного дескриптора
  • NAME – путь к файлу

Поле FD может принимать следующие значения:

  • CWD – текущая рабочая директория процесса
  • RTD – корневая директория
  • TXT  – код программы
  • MEM – файл, отображаемый в оперативную память
  • R – файл открыт для чтения
  • W – файл открыт для записи
  • U – файл открыт для чтения и для записи

R/W/U значения сопровождаются цифрой, которая является номером дескриптора. С помощью него можно найти информацию о дескрипторе по пути /proc/<PID>/fd/<FD>

использование утилиты ioping

Для того, чтобы отследить задержки до файловой подсистемы диска можно использовать утилиту ioping, которая позволяет отслеживать задержку операций ввода/вывода системы. Для получения данной информации выполните команду ioping –c <кол-во пакетов> <назначение>

Размер может быть не только единичным блоком, с помощью флага –s можно указать размер запроса: sudo ioping –c 4 –s 4MiB /

 

Мы используем cookies для улучшения работы сайта
Понятно
Политика конфиденциальности