6.4.5 Как определить что создает нагрузку на сервер UNIX

Обратите внимание: статья направлена, прежде всего, на владельцев виртуальных и выделенных серверов с правами администратора (root).

Главный баннер

Определяем что создает нагрузку на серверах Linux

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

Основные критерии диагностики: включают в себя анализ средней загрузки процессора и памяти, оценку ввода-вывода (I/O) и информацию о активных процессах. Эти параметры позволяют эффективно выявлять проблемы и оптимизировать ресурсы для лучшей производительности сервера

Расмотрим детальнее:

1. Загрузка процессора (CPU):

  • Проверка процентного использования CPU с использованием утилит top, htop,atop.
  • Определение, какие процессы потребляют больше всего CPU.

2. Использование памяти (RAM):

  • Анализ использования оперативной памяти с помощью команды free или утилит top,htop,atop.
  • Определение процессов, занимающих много памяти.

3. Использование дискового пространства (Disk I/O):

  • Проверка активности диска с помощью утилит iotop, iostat
  • Выявление процессов, создающих высокую дисковую нагрузку.

4. Использование сети (Network I/O):

  • Мониторинг сетевого трафика с помощью iftop, nload или утилит сетевого мониторинга.
  • Выявление процессов, генерирующих высокий сетевой трафик.

5. Системные логи и журналы:

  • Просмотр системных логов (/var/log/messages, /var/log/syslog) на наличие ошибок или предупреждений.
  • Анализ вывода журнала системных событий (journalctl).

Диагностика нагрузки с помощью утилиты top

Утилита top в Linux предоставляет эффективный способ мониторинга и диагностики нагрузки на систему, в реальном времени. Рассмотрим основные компоненты её интерфейса, которые помогают оперативно выявить проблемы и оптимизировать использование ресурсов.

Визуальный интерфейс утилиты топ
Визуальный интерфейс утилиты

Интерфейс утилиты top разделен на две основные части:

Верхняя часть: мониторинг текущий нагрузки на систему, включает такие показатели

1. Средняя нагрузка (Load Average):

  • Три значения для последних 1, 5 и 15 минут. Высокие значения могут свидетельствовать о перегрузке системы. Отображение средней нагрузки

  • Нормальной нагрузкой является показатель, который ниже или равен значению количества ядер.

  • Проверить количество процессорных ядер на сервере можете утилитой nproc

  1. root@os ~ # nproc
  2. 2

2. Использование (CPU): Отображение использования процессора

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

Наименование: Значение:
%Cpu(s) Общий процент времени, в течение которого процессор занят выполнением различных задач.
us (User) Процент времени, в течение которого процессор тратит на выполнение задач от пользователя, например, приложений.
sy (System) Процент времени, в течение которого процессор затрачивает на выполнение системных задач, связанных с ядром операционной системы.
ni (Nice) Процент времени, в течение которого процессор выполняет задачи с уменьшенным приоритетом (nice).
id (Idle) Процент времени, в течение которого процессор простаивает и не выполняет никаких задач.
wa (Wait) Процент времени, в течение которого процессор ожидает завершения операций ввода-вывода (I/O).
hi (Hardware Interrupts) Процент времени, в течение которого процессор обрабатывает аппаратные прерывания.
si (Software Interrupts) Процент времени, в течение которого процессор обрабатывает программные прерывания.
st (Steal Time) Процент времени, в течение которого виртуальная машина теряет доступ к процессору из-за действий других виртуальных машин.

3. Использование памяти (Memory):

Строка с использованием памяти содержит информацию о текущем состоянии оперативной памяти (RAM). Вот что обычно включено в эту строку:

Наименование: Значение:
total Общий объем оперативной памяти в системе.
used Количество использованной оперативной памяти.
free Количество свободной оперативной памяти, доступной для использования.
shared Количество памяти, используемой общими (shared) процессами.
buff/cache Сумма памяти, используемой под буферы и кэш. Буферы хранят данные перед их записью на диск, а кэш содержит закешированные данные для ускорения доступа.
available Общее количество памяти, доступное для новых процессов без использования подкачки.

Отображение использования памяти

Эти значения измеряются в килобайтах (KB), мегабайтах (MB) или гигабайтах (GB), в зависимости от текущей загрузки памяти в системе. Информация в этой строке помогает оценить, насколько эффективно используется оперативная память и есть ли необходимость в дополнительных ресурсах.

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

Нижняя часть утилиты

В каждой строке таблицы содержатся следующие поля:

Наименование: Значение:
PID (Идентификатор процесса) Уникальный числовой идентификатор для каждого процесса. По этому идентификатору можно однозначно идентифицировать процесс.
USER (Пользователь) Имя пользователя, от имени которого запущен процесс. Это позволяет определить, кто является владельцем процесса.
PR (Приоритет) Приоритет процесса. Чем ниже значение, тем выше приоритет. Например, 20 - наименьший приоритет, -20 - наивысший.
NI (Nice) Приоритет процесса в виде “nice”-значения. Это число, показывающее насколько “доброжелательным” является процесс. Значения положительные или отрицательные влияют на приоритет.
VIRT (Виртуальная память) Общий объем виртуальной памяти, используемой процессом.
RES (Физическая память) Количество физической памяти, используемой процессом.
SHR (Общая память) Объем памяти, общей между несколькими процессами.
S (Статус) Текущий статус процесса. Например, “R” означает, что процесс выполняется (running), “S” - в режиме ожидания (sleeping).
%CPU (Использование CPU) Процент использования CPU данным процессом.
%MEM (Использование памяти) Процент использования оперативной памяти процессом.
TIME+ (Время CPU) Общее количество времени процессора, затраченное на выполнение процесса.
COMMAND (Команда) Команда или исполняемый файл, запущенный процессом.

Доступны различные комбинации клавиш для управления таблицей процессов, вот самые необходимые:

Команда: Описание:
k (Kill) Убить (завершить) выбранный процесс. Введите PID процесса и нажмите Enter.
r (Renice) Изменить приоритет (nice value) выбранного процесса. Введите PID и новый приоритет, затем нажмите Enter.
u(User Filter) Отобразить только процессы, запущенные определенным пользователем. Введите имя пользователя и нажмите Enter.
M (Sort by Memory Usage) Сортировать процессы по использованию памяти (по убыванию).
P(Sort by CPU Usage) Сортировать процессы по использованию CPU (по убыванию).
F (Choose Fields) Выбор отображаемых полей в таблице процессов.
Space (Toggle Process Selection) Выбор/снятие выбора для одного или нескольких процессов.
Enter (Select Field for Sorting) Выбор поля для сортировки процессов.
W (Write Configuration to File) Сохранение текущей конфигурации в файл для последующего использования.
q(Quit) Выйти из утилиты top.

Проверка нагрузки с помощью atop

Утилита atop в Linux предоставляет подробную информацию о нагрузке на систему и ресурсах в реальном времени. Рассмотрим основные компоненты её интерфейса, которые помогают оперативно выявить проблемы и оптимизировать использование ресурсов.

Интерфейс утилиты atop разделен на несколько разделов, которые предоставляют информацию о нагрузке на систему:

Верхняя часть: общая информация о нагрузке на систему

atop верхняя часть

Наименование: Значение:
Время и длительность работы Показывает текущее время и длительность работы системы.
Количество пользователей Показывает количество активных пользователей в системе.
Нагрузка на систему Отображает текущую нагрузку на систему, включая среднюю загрузку процессора и количество процессов.
Статистика по процессору Предоставляет информацию о загрузке каждого ядра процессора.
Статистика по памяти Отображает использование оперативной памяти и пространства подкачки.
Статистика по диску Показывает активность дисковой подсистемы.
Статистика по сети Отображает сетевую активность, включая количество переданных и принятых байт данных.
Статистика по вводу/выводу Предоставляет информацию о вводе/выводе данных на дисковые устройства.
Статистика по сетевым соединениям Отображает активные сетевые соединения и их характеристики, такие как IP-адреса и используемые порты.
Нижняя часть: содержит подробную информацию о процессах, работающих в системе

atop нижняя часть

Наименование: Значение:
Список процессов Предоставляет список всех процессов в системе с их характеристиками, такими как идентификатор процесса, имя пользователя, использование CPU и памяти, статус и т. д.
Команды управления Предоставляет доступ к командам управления таблицей процессов, таким как убийство процесса, изменение приоритета, сортировка и фильтрация процессов.

Утилита дает возможность просмотра логов за сегодня, для этого наберите:

  1. atop -r

Полезные клавиши:

  • t – перейти вперед по времени.
  • Shift + t – перейти назад по времени.

Для просмотра истории нагрузки на систему за предыдущие дни, Вы можете использовать параметр -r (режим воспроизведения) в сочетании с указанием конкретной даты.

Комманду нужно формировать по таком шаблону:
  1. atop -r YYYYMMDD

Где YYYYMMDD – это дата в формате ГГГГММДД, которая представляет собой день, за который Вы хотите просмотреть историю нагрузки. Например, 20240405 для 5 апреля 2024 года.

Пример готовой комманды:
  1. atop -r /var/log/atop/atop_20240405
  • Используйте клавиши со стрелками вверх и вниз для пролистывания данных вверх и вниз по экрану.
  • Для перемещения по времени вперед-назад, используйте клавиши t и Shift + t.
  • Для пролистывания данных быстрее или медленнее вы можете использовать клавиши со стрелками влево и вправо.
  • Для выхода из режима воспроизведения нажмите клавишу q.
Дополнительно: cписок доступных комбинаций клавиш
  • q - Выход из утилиты atop.
  • r - Изменение режима сортировки процессов (по CPU, памяти и другим критериям).
  • b - Переключение между режимами сортировки (по убыванию или возрастанию).
  • s - Изменение интервала между обновлениями экрана (увеличение или уменьшение).
  • i - Включение или выключение интерактивного режима (поиск и фильтрация).
  • n - Переключение между режимами отображения сетевой активности (байты или пакеты).
  • m - Переключение между режимами отображения использования памяти (различные метрики).
  • p - Переключение между режимами отображения загрузки процессора (все, только системные или только пользовательские процессы).
  • j - Переключение между режимами отображения управления I/O (все, только чтение или только запись).
  • o - Включение или выключение режима отображения отложенных записей (writeback).
  • x - Включение или выключение режима отображения процессов с высоким приоритетом (RT).
  • L - Включение или выключение режима отображения заблокированных процессов.
  • C - Включение или выключение режима отображения команд процессов.
  • A - Переключение между режимами отображения всех или активных процессов.
  • I - Включение или выключение режима отображения системных идентификаторов процессов.
  • N - Переключение между режимами отображения номеров портов или имён сервисов для сетевой активности.
  • W - Сохранение текущих настроек atop в файл.
  • ? - Вывод справки по комбинациям клавиш.

Диагностика нагрузки с помощью htop

Утилита htop - это интерактивная утилита мониторинга для диагностики системы в реальном времени на операционных системах Linux. Она предоставляет более удобный и интерактивный способ диагностировать систему по сравнению с классической утилитой top, и может быть полезным инструментом для администраторов систем и разработчиков.

Визуальное отображение утилиты htop
Визуальное отображение утилиты htop

Интерфейс утилиты: разделен на две основные части

Верхняя часть: мониторинг нагрузки на систему в реальном времени

htop_top

Наименование: Значение:
Общая загрузка Три значения для последних 1, 5 и 15 минут. Высокие значения могут свидетельствовать о перегрузке системы.
Количество ядер Количество физических и логических ядер процессора.
Использование CPU Графическое отображение активности каждого ядра процессора.
Использование памяти Графическая индикация использования оперативной памяти.
Список опций и команд Информация о доступных клавишах для управления и взаимодействия с утилитой.
Заголовок колонок Пояснение значений в верхнем ряду таблицы процессов.
Нижняя часть: содержит таблицу, в которой отображается информация о процессах, расмотрим каждый елемент по отдельности

Отображение нижней части утилиты htop

Наименование: Значение:
PID (Идентификатор Процесса) Уникальный номер, идентифицирующий процесс.
USER (Пользователь) Имя пользователя, от имени которого запущен процесс.
PR (Приоритет) Приоритет процесса.
NI (Nice) Приоритет процесса в виде “nice”-значения.
VIRT (Виртуальная память) Общий объем виртуальной памяти, используемой процессом.
RES (Физическая память) Количество физической памяти, используемой процессом.
SHR (Общая память) Объем памяти, общей между процессами.
S (Статус) Текущий статус процесса (например, выполняется, в режиме ожидания).
%CPU (Использование CPU) Процент использования CPU данным процессом.
%MEM (Использование памяти) Процент использования оперативной памяти процессом.
TIME+ (Время CPU) Общее количество времени процессора, затраченное на выполнение процесса.
COMMAND (Команда) Команда или исполняемый файл, запущенный процессом.

Диагностика нагрузки на процессор с помощью ps

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

  1. ps -aux --sort -pcpu

И разберем, как она может быть использована для мониторинга и анализа активности процессов.

После выполнения команды, Вы получите список процессов, отсортированных по использованию CPU в порядке убывания. Каждая строка представляет собой информацию о конкретном процессе.

Визуальное отображение выполнения команды ps
Визуальное отображение выполнения команды
Подробнее: что отображает каждая колонка утилиты
Наименование: Значение:
USER Имя пользователя.
PID Идентификатор процесса.
%CPU Процент использования процессора.
%MEM Процент использования памяти.
VSZ Размер виртуальной памяти.
RSS Резидентный размер (физическая память).
TTY Терминал, с которого запущен процесс.
STAT Статус процесса.
START Время запуска.
TIME Общее время использования процессора.
COMMAND Команда или исполняемый файл.

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

  1. kill PID
  1. kill -9 PID

Командой kill можно остановить конкретный процесс, указав его PID. Команда killall -9 apache2, завершит все процессы Apache на сервере. Команда killall -u user завершит все процессы пользователя user.

Опция -9 отправляет сигнал, который немедленно завершает процесс, но при этом не предоставляет ему возможность завершить свою работу корректно. Будьте осторожны при использовании -9, так как это может привести к потере данных или некорректному завершению процесса.

Диагностика нагрузки на веб-сервер Nginx

Если на сервере установлен веб-сервис Nginx, с помощью следующей команды, можно вывести список сайтов, на которые поступило больше всего запросов:

  1. tail -n 10000 /var/log/nginx/access.log | awk '{print $6}' | sort -n | uniq -c | sort -nr | head -n10

Следующая команда выведет список IP, с которых поступило больше всего запросов:

  1. tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -n10

Следующей командой можете заблокирувать доступ к серверу для IP 1.1.1.1.

  1. iptables -I INPUT -s 1.1.1.1 -j REJECT

Для удаления правила блокировки, поменяйте ключ -I на -D.