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
- root@os ~ # nproc
- 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 разделен на несколько разделов, которые предоставляют информацию о нагрузке на систему:
Верхняя часть: общая информация о нагрузке на систему
Наименование: | Значение: |
---|---|
Время и длительность работы | Показывает текущее время и длительность работы системы. |
Количество пользователей | Показывает количество активных пользователей в системе. |
Нагрузка на систему | Отображает текущую нагрузку на систему, включая среднюю загрузку процессора и количество процессов. |
Статистика по процессору | Предоставляет информацию о загрузке каждого ядра процессора. |
Статистика по памяти | Отображает использование оперативной памяти и пространства подкачки. |
Статистика по диску | Показывает активность дисковой подсистемы. |
Статистика по сети | Отображает сетевую активность, включая количество переданных и принятых байт данных. |
Статистика по вводу/выводу | Предоставляет информацию о вводе/выводе данных на дисковые устройства. |
Статистика по сетевым соединениям | Отображает активные сетевые соединения и их характеристики, такие как IP-адреса и используемые порты. |
Нижняя часть: содержит подробную информацию о процессах, работающих в системе
Наименование: | Значение: |
---|---|
Список процессов | Предоставляет список всех процессов в системе с их характеристиками, такими как идентификатор процесса, имя пользователя, использование CPU и памяти, статус и т. д. |
Команды управления | Предоставляет доступ к командам управления таблицей процессов, таким как убийство процесса, изменение приоритета, сортировка и фильтрация процессов. |
Утилита дает возможность просмотра логов за сегодня, для этого наберите:
- atop -r
Полезные клавиши:
t
– перейти вперед по времени.Shift + t
– перейти назад по времени.
Для просмотра истории нагрузки на систему за предыдущие дни, Вы можете использовать параметр -r
(режим воспроизведения) в сочетании с указанием конкретной даты.
- atop -r YYYYMMDD
Где YYYYMMDD
– это дата в формате ГГГГММДД, которая представляет собой день, за который Вы хотите просмотреть историю нагрузки. Например, 20240405 для 5 апреля 2024 года.
- 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, и может быть полезным инструментом для администраторов систем и разработчиков.
Интерфейс утилиты: разделен на две основные части
Верхняя часть: мониторинг нагрузки на систему в реальном времени
Наименование: | Значение: |
---|---|
Общая загрузка | Три значения для последних 1, 5 и 15 минут. Высокие значения могут свидетельствовать о перегрузке системы. |
Количество ядер | Количество физических и логических ядер процессора. |
Использование CPU | Графическое отображение активности каждого ядра процессора. |
Использование памяти | Графическая индикация использования оперативной памяти. |
Список опций и команд | Информация о доступных клавишах для управления и взаимодействия с утилитой. |
Заголовок колонок | Пояснение значений в верхнем ряду таблицы процессов. |
Нижняя часть: содержит таблицу, в которой отображается информация о процессах, расмотрим каждый елемент по отдельности
Наименование: | Значение: |
---|---|
PID (Идентификатор Процесса) | Уникальный номер, идентифицирующий процесс. |
USER (Пользователь) | Имя пользователя, от имени которого запущен процесс. |
PR (Приоритет) | Приоритет процесса. |
NI (Nice) | Приоритет процесса в виде “nice”-значения. |
VIRT (Виртуальная память) | Общий объем виртуальной памяти, используемой процессом. |
RES (Физическая память) | Количество физической памяти, используемой процессом. |
SHR (Общая память) | Объем памяти, общей между процессами. |
S (Статус) | Текущий статус процесса (например, выполняется, в режиме ожидания). |
%CPU (Использование CPU) | Процент использования CPU данным процессом. |
%MEM (Использование памяти) | Процент использования оперативной памяти процессом. |
TIME+ (Время CPU) | Общее количество времени процессора, затраченное на выполнение процесса. |
COMMAND (Команда) | Команда или исполняемый файл, запущенный процессом. |
Диагностика нагрузки на процессор с помощью ps
Для мониторинга нагрузки на процессор, Вы сможте воспользоваться утилитой ps. Утилита предоставляет множество информации о запущенных процессах в операционной системе Linux. Одним из способов отслеживания нагрузки на процессор является использование комбинации параметров, включая сортировку по использованию CPU. Давайте рассмотрим команду:
- ps -aux --sort -pcpu
И разберем, как она может быть использована для мониторинга и анализа активности процессов.
После выполнения команды, Вы получите список процессов, отсортированных по использованию CPU в порядке убывания. Каждая строка представляет собой информацию о конкретном процессе.
Подробнее: что отображает каждая колонка утилиты
Наименование: | Значение: |
---|---|
USER | Имя пользователя. |
PID | Идентификатор процесса. |
%CPU | Процент использования процессора. |
%MEM | Процент использования памяти. |
VSZ | Размер виртуальной памяти. |
RSS | Резидентный размер (физическая память). |
TTY | Терминал, с которого запущен процесс. |
STAT | Статус процесса. |
START | Время запуска. |
TIME | Общее время использования процессора. |
COMMAND | Команда или исполняемый файл. |
При просмотре результата, обратите внимание на процессы, которые находятся в верхней части списка. Если Вы замечаете какие-то подозрительные процессы, Вы можете завершить их, выполнив команду:
- kill PID
- kill -9 PID
Командой kill
можно остановить конкретный процесс, указав его PID
. Команда killall -9 apache2
, завершит все процессы Apache на сервере.
Команда killall -u user
завершит все процессы пользователя user.
Опция
-9
отправляет сигнал, который немедленно завершает процесс, но при этом не предоставляет ему возможность завершить свою работу корректно. Будьте осторожны при использовании -9, так как это может привести к потере данных или некорректному завершению процесса.
Диагностика нагрузки на веб-сервер Nginx
Если на сервере установлен веб-сервис Nginx, с помощью следующей команды, можно вывести список сайтов, на которые поступило больше всего запросов:
- tail -n 10000 /var/log/nginx/access.log | awk '{print $6}' | sort -n | uniq -c | sort -nr | head -n10
Следующая команда выведет список IP, с которых поступило больше всего запросов:
- tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -n10
Следующей командой можете заблокирувать доступ к серверу для IP 1.1.1.1.
- iptables -I INPUT -s 1.1.1.1 -j REJECT
Для удаления правила блокировки, поменяйте ключ -I
на -D
.