НОВОЕ

Как проверить нагрузку и производительность VPS-сервера

Анализ производительности сервера

Что делать, если сервер регулярно «падает»? Как понять, что «съедает» ресурсы и куда «копать»? Предлагаю ознакомиться с моей техникой анализа производительности VPS. В первую очередь будем использовать стандартные бесплатные средства, которые установлены по умолчанию на всех системах Linux. Дополнительно рассмотрим и другие инструменты мониторинга, визуализации, чтения и обработки системных журналов, log-файлов.

Анализ процессов, CPU, RAM

Утилита top

Top (с англ. table of processes) — команда терминала Linux, создана Роджером Биннсом и модифицирована С. Варнером, выводит таблицу всех работающих в системе процессов в режиме реального времени. Входит в стандартный пакет программ всех существующих дистрибутивов Linux.

Утилита Top для Linux

Top — аналог «Диспетчера задач» в Windows, помогает увидеть общую картину, что или кто «кушает» ресурсы сервера.

Анализ нагрузки начинается с показателя Load Average (LA) — средняя нагрузка на систему за определенное время, выводится в виде 3-х значений: средняя нагрузка на VPS за 1, 5 и 15 минут. Чем ниже эти показатели — тем лучше. Соотношения нагрузки измеряется ядрами. К примеру, если LA показал — 1, 1, 1. Для одноядерного процессора это значит, что он загружен на 100%. Статистика Load Average доступна также в отдельном системном файле: /proc/loadavg

Горячие клавиши утилиты Top:

  • 1 — отобразить статистику по всем ядрам CPU
  • m — сортировать по нагрузке на RAM
  • p — сортировка по нагрузке на CPU
  • SHIFT+T — сортировка по времени (позволяет понять какой из процессов дольше всего работает)
  • SHIFT+N — сортировка по идентификационному номеру PID
  • SHIFT+F — меню выбора полей (находим необходимый показатель и клавишей d закрепляем в таблице)
  • n — изменить число отображаемых процессов (команда попросит ввести число)
  • s — изменить интервал обновления процессов
  • с — вывод всех опций и аргументов в таблице
  • = — сброс фильтров
  • k — уничтожить процесс (команда попросит указать PID процесса)
  • r — изменить приоритет процесса
  • z — изменить цвет подсветки процессов
  • Пробел — обновить
  • h — справка
  • q — выйти из команды

Быстрые команды Top:

top -n 1 — один раз получить данные и вывести статистику на экран;

top - n 5 — выполнить 5 обновлений статистики;

top -u username — вывести статистику потребления ресурсов для конкретного пользователя системы;

top -n 1 -b > top-output.txt — экспортировать вывод команды в файл;

У команды top существует много «форков» — atop, htop, vtop, mytop, powertop и т.д. По умолчанию они не входят в состав Linux и их нужно устанавливать отдельно.

Утилита ps

Утилита Ps в Linux

Ps (с англ. process state) — базовая утилита командной строки Linux для вывода списка запущенных в системе процессов. Ее альтернативой является утилита top.

Команды:

ps -A — вывод всех процессов;

ps -x — вывод всех процессов, принадлежащих вам;

ps -U root -u root — вывод всех процессов с правами указанного пользователя;

ps -e --forest — вывести дерево процессов;

ps -eM — вывод контекста безопасности запущенных процессов;

ps -p 22813 — вывод статистики по конкретному процессу (указав PID);

Однострочная команда для вывода ТОП-10 процессов, которые нагружают систему: 

ps axo rss,comm,pid \
| awk '{ proc_list[$2]++; proc_list[$2 "," 1] += $1; } \
END { for (proc in proc_list) { printf("%d\t%s\n", \
proc_list[proc "," 1],proc); }}' | sort -n | tail -n 10 | sort -rn \
| awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}'

Утилита free

Free — команда терминала Linux, входит по умолчанию во всех дистрибутивы Linux, показывает статистику используемой и свободной оперативной памяти сервера.

Команда Free в Linux

Вывод команды Free состоит из таких значений:

  • total — показывает полный объем оперативной памяти;
  • used — показывает сколько использовано оперативной памяти;
  • free — свободная (неиспользуемая) оперативная память;
  • shared — память разделяемая с системными службами, программами, процессами;
  • buff/cache — память зарезервирована для кэша;
  • available — оценка доступной оперативной памяти для запуска новых процессов/приложений;
  • Swap — виртуальная память, файл подкачки.

Вся статистика по умолчанию выводится в килобайтах. Информацию утилита получает из отдельного системного файла: /proc/meminfo

Быстрые команды утилиты Free:

free -h — вывод статистики в мегабайтах/гигабайтах;

free -s 5 — выводить статистику каждые 5 секунд;

free -w — расширенный вывод команды;

free -h -l — статистика по самым высоким и низким значениям;

free -h -t — вывод общего значения по использованию памяти;

free -h -c2 -s60 — команда выполнится определенное число раз с указанной в параметре s задержкой;

free -V — просмотреть текущую версию утилиты;

free --help — справка.

Анализ файловой системы

Утилита df

Очень часто виной всяких проблем с веб-сайтами стает банальная нехватка места на накопителе. Это легко проверить с помощью команды Df (disk free) — выведет все разделы и покажет сколько дискового пространства занято и потребляется, сколько свободно.

Команда Df в Linux

Быстрые команды утилиты Df:

df -h — выводить статистику в Мб/Гб;

df -T — отобразить тип файловой системы;

df -hT /home/username/ — отобразить статистику для указанной директории;

Утилита du

Du (disk usage) — стандартная утилита Linux для оценки файлового пространства. Позволяет подсчитать занимаемое место для любой директории.

Команда Du в Linux

Быстрые команды утилиты Du:

du -hs /* — вывести на экран размер всех директорий;

du -sh — подсчитать сколько занимает место текущий каталог;

du -s Downloads — подсчитать сколько места занимает указанный каталог;

Анализ системных логов (log files)

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

Системные логи — хроника вашего сервера. В реальном времени можно не увидеть всех проблем, особенно если они внешние. И только с помощью журналов, истории, можно найти запротоколированные ошибки и распознать «виновника торжества».

Логи посещений (Access log)

Access server log

Access.log — журнал всех обращений к хосту (то есть, домену/сайту/серверу), существует в виде обычного txt-файла. Благодаря этому файлу можно получить полезную информацию о всех внешних запросах и посещениях сайта, к примеру:

  • Узнать тип запроса (GET/POST) и его содержимое
  • Узнать протокол соединения с сайтом (заголовок): HTTP 1.1./HTTP2
  • С каких IP-адресов, в какой день и время, по каким URL-адресам заходили на сайт
  • Количество отданных байт
  • Какой User-agent у посетителей (версия, движок браузера)
  • Это живые люди или боты/сканеры/краулеры
  • Геоданные (город/страна) посетителей и т.д.

Для сервера Apache логи посещений хранятся в файле: /var/log/apache2/access.log

Для сервера Nginx: /var/log/nginx/access.log

Быстрые команды для просмотра файла логов:

tail -f /var/log/apache2/access.log — вывести в режиме реального времени последние 10 строк log-файла;

tail -f /var/log/apache2/access.log > ~/my_log.log — вывести в режиме реального времени логи в файл;

tail -n100 /var/log/apache2/access.log — вывести 100 последних строк файла логов;

tail -f /var/log/apache2/access.log | grep 192.168.2.15 — фильтрация вывода строк по указанному IP-адресу;

tailf /var/log/apache2/access.log — вывод содержимого log-файла в режиме реального времени.

Логи ошибок (Error log)

Error server log

Error.log — журнал ошибок хоста/сайта/сервера. Позволяет узнать тип и причину возникновение ошибок. Предоставляет такую информацию как:

  • Дату и время ошибки
  • Тип ошибки (Notice/Warning/Fatal)
  • Источник ошибки (название модуля, компонента, объекта и т.д.)
  • URL-адрес ошибки (путь к файлу/папке на сервере)
  • IP-адрес клиента, которому была возвращена ошибка

Для сервера Apache логи ошибок хранятся в файле: /var/log/apache2/error.log

Для сервера Nginx: /var/log/nginx/error.log

Анализ логов базы данных MySQL

Ошибки базы данных также служат важным источником для понимания проблемы. Их можно найти в файле: /var/log/mysql/error.log

Очень важно при выявлении проблем с базой данных создать журнал медленных запросов (с правами mysql:mysql) и указать его в файле конфигурации MySQL: /etc/mysql/my.cnf

Необходимо добавить в блок [mysqld] следующие строки:

slow_query_log=1#включение журнала медленных запросов
slow_query_log_file=/var/log/mysql/mysql-slow.log#расположение файла журнала
long_query_time=5#критерий медленных запросов, в секундах
log-queries-not-using-indexes#учитывать запросы без индекса

Чтобы изменения вступили в силу перезапустите MySQL: sudo systemctl restart mysql

Теперь, чтобы просмотреть лог медленных запросов выполнить команду: sudo tail -f /var/log/mysql/mysql-slow.log

Но тут возникает одна проблема — когда файл разрастается его сложно читать. Поэтому, лучше использовать утилиту mysqldumpslow:

mysqldumpslow /var/log/mysql/mysql-slow.log

mysqldumpslow -t 5 -s /var/log/mysql/localhost-slow.log#вывод первых 5 медленных запросов, отсортированных по времени выполнения

Еще одна утилита для чтения логов медленных запросов SQL — pt-query-digest. Входит в состав Percona Toolkit (набор инструментов по обслуживании базы данных).

Не лишним будет дополнительно протестировать базу данных с помощью полезной утилиты — mysqltuner.

Анализ сообщений ядра Linux

Dmesg — команда Linux для вывода системных сообщений на уровне ядра. Позволяет узнать, что творится «за кадром». Каждую минуту ядро Linux генерирует сообщения, которые сначала попадают в буфер, а уже оттуда с помощью утилиты dmesg мы можем достать и прочитать их. В процессе комплексной диагностики системы данная команда может оказаться очень полезной:

dmesg | tail#вывод последних десяти сообщений ядра

dmesg -H — вывод сообщений в удобном виде с подсветкой

dmesg --level=emerg,alert,crit,err,warn #вывод только важных сообщений

dmesg -u #вывод всех сообщений из пространства пользователя

Другие системные логи

В папке /var/log можно найти и другие полезные логи, например:

  • /var/log/php-fpm.log — анализ логов PHP;
  • /var/log/syslog — глобальный системный журнал Linux;
  • /var/log/lastlog — последние входы в систему;
  • /var/log/auth.log — журналы авторизации, включая все попытки входа на сервер;
  • /var/log/btmp — журнал неудачных попыток входа на сервер;
  • /var/log/wtmp — еще один журнал входов в систему;

Остальные журналы, например логи хостинг-панели, или почтового клиента, можно найти там же — в /var/log.

Логирование WordPress

Если обстоит работа с сайтами на CMS WordPress, полезно будет «покопаться» в логах самой CMS. Если они отключены, включить их можно в wp-config.php:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );#скрываем ошибки от посетителей сайта
define( 'WP_DEBUG_LOG', true );

Теперь все логи будут записываться в файл /wp-admin/debug.log

Обработка и чтение log-файлов

Goaccess dashboard

Если у сайта большой трафик, то анализ логов будет занимать слишком много времени. Для этого рекомендуется использовать автоматические средства обработки журналов — лог анализаторы. Вот некоторые из них:

  • Screaming Frog Log File Analyser — очень простая, удобная и функциональная кроссплатформенная (Windows/macOS/Linux) бесплатная программа для чтения/анализа логов сервера от создателей SEO Screaming Frog.
  • GoAccess — очень полезная серверная утилита для чтения логов и подготовки подробных отчетов в виде html-страницы.
  • Logwatch — еще одна удобная утилита для чтения и подготовки отчетов на основе log-файлов и отправке на электронную почту админа.
  • Webalizer — древнейшая серверная программа для мониторинга сайтов и подготовки отчетов в HTML-формате. Создана Братфордом Л. Барретом в 1997 году. Входит в состав многих хостинг-панелей.
  • Splunk — коммерческая система мониторинга сервера, ориентированная на кибербезопасность.
  • Elastic Logstash — лог-анализатор Premium-уровня.

Системы централизованного мониторинга сервера

Grafana dashboad

Если вы работаете в крупной компании, где у вас сотни клиентов и тысячи сайтов — вам понадобится мощная система централизованного мониторинга. Самыми популярными на сегодняшний день являются:

  • Grafana — универсальная свободно распространяемая (open source) система мониторинга для визуализации и анализа данных. Позволяет создавать собственные дашборды на базе различных логов, метрик и другой любой статистики.
  • Kibana — сложная система визуализации и анализа данных, которая входит в так-называемый стек ELK (Elastic + Logstash + Kibana) для мониторинга крупных IT/VPS/Cloud инфраструктур и систем.
  • Zabbix — свободная система мониторинга компьютерной сети, сервера, облачных IT инфраструктур.

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

Оценка:
( Пока оценок нет )
Подписка на KRASHENININ.TECH

Получайте регулярные обновления на почту!


Виталий Крашенинин/ автор статьи
Основатель блога, публицист, обзорщик веб-технологий, IT-специалист. Исследователь цифрового мира. Сфокусирован на кибербезопасности, системном администрировании, веб-разработке и SEO.
Не забудьте поделиться материалом в соцсетях:
KRASHENININ.TECH - блог о веб-технологиях, и не только
Подписаться
Уведомление о
guest
0 Комментарий
Встроенные отзывы
Просмотреть все комментарии
0
Есть мысли? Прокомментируй!x
()
x
Читайте ранее:
Плагины безопасности для Wordpress
ТОП-7 плагинов безопасности для защиты WordPress

Безопасность - одна из важнейших составляющих в обслуживании и продвижении любого сайта. Несмотря на популярность и продвинутость, WordPress - самая...

Закрыть