Каждый запущенный на сервере процесс оказывает нагрузку, и если ресурсов сервера становится недостаточно, могут возникать проблемы: медленная работа сайта, задержки в выполнении скриптов и так далее.
Проанализировать, что именно нагружает сервер, можно с помощью специальных утилит. Их довольно много; в статье мы рассмотрим три из них:
В целом они довольно похожи; работа с htop
может быть немного удобнее за счет интерактивности; при этом top
предустановлена во всех дистрибутивах Linux и не требует отдельной установки; atop
отличается возможностью ведения логов.
При медленной работе сайта дополнительно рекомендуем воспользоваться сервисом PageSpeed Insights от Google, который анализирует скорость загрузки страниц и сообщает, каким образом можно оптимизировать работу сайта. Также можно попытаться оптимизировать работу сайта за счет переноса каталога временных файлов MySQL в tmpfs.
Как было сказано выше, утилита top
предустановлена в UNIX-системах, поэтому для запуска вам достаточно подключиться к серверу по SSH и выполнить команду top
.
Вывод утилиты выглядит следующим образом:
В верхней части выводится информация о системе, ниже — список процессов. Вывод обновляется каждые 2 секунды. Самые «жадные» до ресурсов процессы, оказывающие самую большую нагрузку на процессор, будут выведены вверху списка.
Слева вверху указано текущее время системы, далее:
Up
— время работы системы с последнего запуска.
User
— количество текущих пользователей.
Load average
— средняя нагрузка на сервер: отображаются значения за одну, пять и 15 минут назад.
Tasks
— общее количество запущенных процессов в разных статусах (running
— выполняемые; sleeping
— в ожидании; stopped
— остановленные; zombie
— «зомби», дочерние процессы, ожидающие завершения родительского процесса).
Cpu(s)
— процент времени процессора, затраченного на выполнение процессов, в том числе:
us
— пользовательские процессы (высокое значение данного показателя может указывать, в том числе, на проблемы в коде сайта, необходимость его оптимизации);
sy
— процессы ядра;
id
— неиспользуемые ресурсы (чем выше этот показатель, тем лучше);
wa
— операции ввода/вывода, т.е. дисковые операции.
Mem
, Swap
— сведения об использовании оперативной памяти (total
— общий объем, free
— объем свободной памяти, used
— объем использованной памяти).
По умолчанию процессы выстроены в таблице по размеру нагрузки на процессор, от большего значения к меньшему.
Обозначения столбцов:
PID
— идентификатор процесса;
USER
— пользователь, запустивший процесс;
PR
— приоритет процесса;
NI
— измененный приоритет (присвоенный пользователем с помощью команды nice
);
VIRT
— объем используемой виртуальной памяти (здесь выводится тот объем памяти, который был запрошен процессом, даже если фактически используется меньше);
RES
— объем используемой оперативной памяти (в данном случае, если процесс запросил 50Мб памяти, а использует 10Мб, будет выведено 10Мб);
SHR
— объем памяти, разделяемой с другими процессами (т.е. память, которая может быть использована другими процессами);
S
— статус процесса (running
— запущен; sleeping
— в ожидании; zombie
— процесс-«зомби»);
%CPU
— процент использования процессорного времени;
%MEM
— процент использования оперативной памяти;
TIME
— общее время работы процесса;
COMMAND
— имя процесса (команда, которой был запущен процесс).
Для работы с утилитой top
используются следующие клавиши:
Пробел — обновить вывод
M — сортировка по используемой памяти
P — сортировка по нагрузке на процессор (используется по умолчанию)
T — сортировка по времени работы процесса
A — сортировка по максимальному потреблению различных ресурсов
u — сортировка по имени пользователя (потребуется ввести имя пользователя)
k — завершить процесс (потребуется указать его идентификатор, PID)
n — изменить количество процессов в выводе (потребуется указать нужное количество)
c — вывести полный путь запущенного процесса (столбец COMMAND)
h — вывод справки
q — выход из программы
В отличие от top
, утилиту htop
сначала необходимо установить на сервер:
Ubuntu / Debian:
apt-get install htop
CentOS:
yum install htop
И после запустить:
htop
Вывод команды выглядит следующим образом:
Аналогично выводу top
, в верхней части представлена информация о системе, ниже — список процессов. Значения столбцов в htop
те же, что в top
(они описаны выше).
Сверху слева вы можете видеть данные о нагрузке каждого ядра процессора, объем занятой памяти, сведения о количестве процессов, значения load avearage (средней нагрузки) за последние 1, 5 и 15 минут и аптайм системы.
По умолчанию процессы отсортированы по уровню нагрузки на процессор, от большего к меньшему.
Чтобы отсортировать их по занятой памяти (или любому другому параметру), просто кликните на название нужного столбца, например MEM. Для обратной сортировки (от меньшего к большему) достаточно кликнуть на тот же столбец еще раз. Также для управления сортировкой можно использовать клавиши M (сортировка по памяти), P (по процессору), T (по времени), аналогично утилите top.
Дополнительно используются:
Пробел — отметить процесс (таким образом можно помечать процессы для групповой операции с ними, например, завершения).
u — вывести процессы конкретного пользователя.
Для управления используются клавиши F1 – F10:
F1 — вывод справки
F2 — настройка вывода (добавление, удаление столбцов, отображение расширенной информации в верхнем блоке и пр.)
F3 — поиск процессов
F4 — фильтрация процессов (вывод процессов, имеющих в названии указанное слово)
F5 — вывод дерева процессов (родительские и дочерние процессы)
F6 — изменить тип сортировки
F7 / F8 — повышение / понижение приоритета
F9 — завершение процесса (в отличие от top
, не требуется указание PID — просто выделите с помощью мыши или клавиатуры нужный процесс и нажмите F9. Для подтверждения завершения процесса нажмите Enter, для отмены — Esc).
F10 — выход из программы
Функции для каждой клавиши могут изменяться, в зависимости от того, в каком меню программы вы находитесь, при этом доступные действия по соответствующим клавишам будут отображаться внизу окна, что упрощает работу с утилитой.
Основным преимуществом утилиты atop
является функция ведения логов. Благодаря этому можно не только контролировать нагрузку в текущий момент, но и отслеживать работу процессов за прошедшие дни, чтобы диагностировать плавающие ошибки, которые сложно «поймать» при мониторинге в реальном времени.
Утилиту необходимо установить на сервер:
Ubuntu / Debian:
apt-get install atop -y
CentOS:
yum install atop -y
Также рекомендуем добавить atop
в автозагрузку:
Ubuntu / Debian / CentOS 7:
systemctl enable atop
CentOS 6:
chkconfig atop on
Ubuntu 14.04:
rm /etc/init/atop.override
Запустите утилиту:
atop
Вывод выглядит примерно следующим образом:
В верхней части отображается информация о системе и нагрузке на ключевые компоненты: процессор, ядра, память, сеть. Ниже выводится список процессов.
Для управления выводом можно использовать:
m — сортировка по используемой памяти
d — сортировка по нагрузке на диск
u — нагрузка по пользователям
v — подробная информация по процессам
i — изменение интервала обновления данных (по умолчанию 10 секунд)
g — вернуть вывод по умолчанию
n — сортировка процессов по нагрузке на сеть (доступна при наличии установленного патча ядра)
Сочетания клавиш с Shift выстроят текущий список процессов по соответствующим параметрам:
По умолчанию atop собирает сведения о состоянии системы каждые 10 минут и сохраняет их в файл лога, располагающийся в директории /var/log/atop
.
Чтобы просмотреть лог за сегодня, выполните:
atop -r
Полезные клавиши:
Файл за конкретный день имеет имя atop_ГГГГММДД
. Чтобы просмотреть лог за нужный день, используйте команду atop -r
и укажите путь к файлу, например:
atop -r /var/log/atop/atop_20200227
Изменить настройки ведения лога можно в конфигурационном файле atop
, который размещается по пути /etc/default/atop
или /etc/sysconfig/atop
— в CentOS.
# Интервал создания снимка нагрузки сервера, в секундах:
INTERVAL=600
# Путь к директории с логами:
LOGPATH="/var/log/atop"
# Имя файла логов
OUTFILE="$LOGPATH/daily.log"
Например, для того, чтобы atop
делал снимок нагрузки раз в минуту, а не раз в 10 минут, укажите интервал 60.
После внесения изменений перезапустите atop
:
systemctl restart atop.service
А как сделать, чтобы старые логи удалялись через определенный промежуток времени?
Добрый день!
Настроить ротацию логов можно, изменив значение
LOGGENERATIONS
в конфигурационном файлеatop
(для CentOS —/etc/sysconfig/atop
, для Ubuntu/Debian —/etc/default/atop
). Это значение определяет срок хранения логов. Например, если указано значение 2, в/var/log/atop
будет храниться три файла: один с логами за текущий день и два других за два предыдущих дня.Вы большие молодцы