Мониторинг нагрузки и процессов: top, htop, atop
Каждый активный процесс на сервере генерирует нагрузку, и когда ресурсы сервера исчерпываются, это может вызвать различные проблемы, такие как замедленная работа веб-сайта или задержки в выполнении скриптов.
Для анализа нагрузки на сервер существует несколько специальных утилит. Мы рассмотрим три из них:
В общем, они довольно похожи между собой. Утилита htop предоставляет интерактивный интерфейс и может быть более удобной в использовании. Top, с другой стороны, поставляется с предустановленными дистрибутивами Linux и не требует отдельной установки. Atop имеет возможность вести логи.
Если ваш веб-сайт работает медленно, также рекомендуется воспользоваться сервисом PageSpeed Insights от Google. Этот инструмент анализирует скорость загрузки страниц и предоставляет рекомендации по оптимизации вашего сайта. Также можно улучшить производительность сайта, переместив каталог временных файлов MySQL в tmpfs.
top
Утилита top установлена по умолчанию в большинстве UNIX-систем, и вы можете запустить ее, подключившись к серверу через SSH и выполнить команду top.
Вывод top выглядит следующим образом:
В верхней части вывода указана информация о системе, а ниже представлен список процессов. Вывод обновляется каждые 2 секунды, и наиболее интенсивно потребляющие ресурсы процессы будут находиться в верхней части списка.
Информация о системе
В верхнем левом углу вывода отображается текущее системное время, а затем следующие данные:
Up — время, прошедшее с момента последней перезагрузки системы.
User — количество текущих пользователей.
Load average — средняя нагрузка на сервере, показывает значения за последние одну, пять и пятнадцать минут.
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 — выйти из программы
htop
В отличие от утилиты top, htop требует предварительной установки на сервере:
Ubuntu / Debian:
apt-get install htop
CentOS:
yum install htop
После установки запустите:
htop
Вывод команды представлен ниже:
Как и в случае с top, в верхней части отображается информация о системе, а ниже — список процессов. Значения столбцов в htop совпадают с top (они описаны выше).
Вверху слева вы можете видеть данные о нагрузке на каждое ядро процессора, объеме используемой памяти, количестве процессов, значениях средней нагрузки (load average) за последние 1, 5 и 15 минут, а также время работы системы (uptime).
По умолчанию процессы сортируются по использованию процессора, от большего к меньшему.
Для сортировки по объему используемой памяти (или другому параметру) просто кликните на название соответствующего столбца, например MEM. Для обратной сортировки (от меньшего к большему) щелкните на том же столбце еще раз. Кроме того, вы можете использовать клавиши M (сортировка по памяти), P (по процессору), T (по времени), как и в top.
Дополнительные функции включают в себя:
Пробел — отметить процесс (это позволяет помечать процессы для выполнения с ними групповых операций, таких как завершение).
u — отобразить процессы только для определенного пользователя.
Для управления доступны клавиши F1 – F10:
F1 — вывод справки.
F2 — настройка отображения (добавление или удаление столбцов, отображение дополнительной информации в верхней части и другие параметры).
F3 — поиск процессов.
F4 — фильтрация процессов (показывать только процессы с определенным текстом в имени).
F5 — отображение дерева процессов (показывает отношения между родительскими и дочерними процессами).
F6 — изменение типа сортировки.
F7 / F8 — повыш ение или понижение приоритета процесса.
F9 — завершение процесса (в отличие от top, не требуется указание PID — просто выберите процесс и нажмите F9; для подтверждения завершения нажмите Enter, для отмены — Esc).
F10 — выход из программы.
Функции для каждой клавиши могут изменяться в зависимости от того, в каком меню программы вы находитесь. Доступные действия будут отображаться внизу окна, что облегчает работу с этой утилитой.
atop
Главной особенностью утилиты 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 позволяют сортировать текущий список процессов по соответствующим параметрам:
- 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_20200227
Для изменения настроек записи логов, отредактируйте конфигурационный файл atop, который находится по пути /etc/default/atop или /etc/sysconfig/atop (в CentOS).
# Интервал создания снимка нагрузки сервера, в секундах:
INTERVAL=600
# Путь к директории с логами:
LOGPATH="/var/log/atop"
# Имя файла логов
OUTFILE="$LOGPATH/daily.log"
Например, чтобы изменить интервал записи снимков нагрузки на одну минуту, укажите интервал 60.
После внесения изменений перезапустите atop:
systemctl restart atop.service