Проверить нагрузку на сервер

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

Чтобы этого не произошло, нужно следить за параметрами сервера. За какими и как – расскажем в этой статье.

Как посмотреть общую нагрузку на сервер

Отслеживать нагрузку на ОС WIndows позволяет «Диспетчер задач», в Linux свои инструменты.

Самая распространённая утилита мониторинга – top.

Top показывает среднюю нагрузку на сервер (Load Average) в течение 1, 5 и 15 минут. В идеале она должна быть меньше, чем количество ядер процессора. Например, LA 4 при четырёх ядрах означает: каждое ядро загружено на 100% — стоит снизить нагрузку.

Далее последовательно указаны самые «тяжёлые» процессы, сколько они потребляют оперативной памяти и CPU.

Другая утилита – atop – подсвечивает высокую нагрузку красным.

Схожий функционал предоставляет nmon – при нажатии определённых клавиш выдаёт графики нагрузки: процессор (с), чтение/запись диска (d), сеть (n) и память (m) и т. д. Список нужных клавиш будет отражен при запуске программы — в приветственном окне.

Как посмотреть нагрузку детально

Начнём с дисковой памяти — её не покажут перечисленные утилиты.

ISPmanager не открывается, а на сайтах возникает ошибка (например, Unable to connect to the database: Could not connect to MySQL), однако сам сервер доступен и пингуется. Скорее всего, закончилось место на диске, проверить это легко:

Команда df -h покажет все примонтированные разделы и сообщит, сколько места занято, а сколько свободно. Картина на скрине сигнализирует – место на диске нужно срочно освобождать:

du -hs /* отобразит размер всех директорий:

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

Также можно освободить место через очистку временных файлов – логов, кеша, php-сессий.

С оперативной памятью по-другому – она динамична. Процессы запускаются, отработав, умирают, и показатели меняются ежесекундно. Оценить обстановку поможет free -m.

В строке -/+ buffers/cache увидим показатели used и free – использованная и свободная память.

По первой строке можно определить объем доступной пользователю памяти. Для этого сложите параметры free и cached, так как закешированая память также может быть использована приложениями.

Определить, какие процессы занимают память, поможет такой однострочник:

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

Всем VDS на хостинге предоставлен стомегабитный канал, хватает его или нет покажет iftop, запущенный с ключом -m 100M.

На скриншоте видна белая полоса — это доступная ширина канала. Больше, чем наполовину, она занята процессом загрузки с серверов Яндекс. Когда полоса доходит до правой части экрана, весь доступный канал забит — необходимо увеличить пропускную способность сервера.

Также показатели трафика на VDS покажет VMmanager — раздел “Нагрузка VM”.

На графиках видно, сколько трафика прошло через сервер за определённый период времени.

Читайте также  Семейное дерево для ребенка в школу

Как увидеть нагрузку через браузер

Есть мониторинги нагрузки, например, Munin:

Если на сервере установлена панель ISPmanager, в ней также можно анализировать нагрузку по процессору, памяти, занимаемому дисковому пространству:

В списке самых прожорливых процессов Apache и Mysql

Если нагрузку создаёт Apache, то на сервер приходит множество запросов по 80, 443 портам. Для снижения нагрузки рекомендуется использовать на сервере Nginx, включить сжатие и кэширование статичных ресурсов.

Возможно, это легитимная посещаемость, поисковые боты или DDOS-атака. В случае поисковых ботов можно сократить время между запросами к серверу в учетной записи Яндекс.Вебмастер и Google Webmasters Tool. В случае атаки настройками не обойтись — необходимо подключить дополнительную защиту.

Ресурсы потребляет Mysql – проведите оптимизацию настроек службы с помощью Mysqltuner.

Также стоит по возможности оптимизировать SQL-запросы к базам данных. Проверьте их через отображения списка текущих операций Mysql — команда show full processlist.

И обратите внимание на показатель WA в top: значение больше 20 говорит о том, что информация не успевает записываться на диск – необходимы диски SSD.

Виды ДОС-атак (условия для DOS/DDos атак)

1. Недостаточная фильтрация данных может привести повышенному потреблению ресурсов, к длительному или бесконечному циклу, выделению огромного объема оперативной памяти.
2. Недостаточная фильтрация данных
3. Атака второго рода — подобные атаки приводят к срабатыванию системы защиты, что приводит к недоступности сервера
4. Флуд — Думаю тут все ясно. Большое количество ресурсоемких запросов, обращенных к серверу.

В интернете были найдены полезные команды для проверки нагрузки на сервер, а так же для анализа и определения ДДОС (DDoS) атаки.

Что делать?
Во-первых, посмотрим число процессов Апача:

Либо в случае ОС CentOS5/RHEL:

Если их более 20-30, то это уже повод для беспокойства.

Далее обязательно просмотреть глобальные логи Апача на предмет наличия аномалий (например, запросов без указания вихоста):

Далее, стоит просмотреть логи всех сайтов и обратить особое внимание на самые большие из них.

Если «большой» лог найден, то его стоить проанализировать на предмет аномалий следующим образом:

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

Таким образом, если какой-то IP / блок айпи заваливает сайт запросами, это будет видно по резко уходящим в верх значениям запросов для IP злоумышленников.

Полезные команды:
Число процессов Apache:

Число коннектов на 80 порт:

То же, в статусе SYN

Посмотреть много ли разных IP:

На какой домен чаще всего идут запросы:

Посмотреть откуда IP или Domain:

С какого IP сколько запросов:

Количество соединений с сервером:

Вывод информации в реальном времени, IP которые соединены с сервером и какое количество соединений по каждому IP

Проверка нагрузки на сайт
Порой все же хочется знать кукую нагрузку потянет вновь написанный сайт, или сам хостинг. Сможет ли сайт нормально функционировать при наплыве посетителей в час пик? Ответить конечно можно (теоретически, взвесив совокупность всех ресурсов доступных сайту), но хотелось бы видеть конкретные цифры.

Для тестирования сайта на нагрузку можно использовать онлайн сервис – loadimpact.com сервис к сожалению платный, но есть и бесплатный режим тестирования, на 50 человек онлайн. Думаю этого достаточно, чтобы проверить блог или небольшой сайт на нагрузку. И если ваш сайт завалится, например вы увидите ошибку Internal Server Error или страница просто не будет открываться, значит тест завален. Идем капать конфиги apache, nginx, скрипты php и запросы к серверу sql, возможно наш вновь испеченный сайт на собственной cms не так уж и хорош, как на хотелось бы)

Читайте также  Почему не работает гисметео

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

Анализ нагрузки на сервер позволит быстро понять причины медленной работы. Это необходимо делать еще и для того, чтобы вовремя планировать покупку новых серверов.

Аппаратная часть любого сервера состоит из 4 основных компонент:

  • Процессор
  • Память
  • Диск
  • Сетевой интерфейс

Анализ загруженности сервера заключается в сборе и обработке статистики каждой из этих компонент.

Процессор

Первым делом следует проверить процессор. Самый быстрый способ — использовать top:

Необходимо обратить внимание на выделенные участки. Загрузка процессора обычно не должна превышать 10. 20%. Исключение составляют сервера специального назначения (например, пережиматоры фоток или медиа данных). Следующие показатели наиболее важные для анализа:

  • Показатель us — пользовательские процессы. Высокий показатель означает, что наше приложение нагружает сервер.
  • Показатель id — неиспользуемые ресурсы процессора. Этот показатель должен быть высоким (нормальные значения от 80 до 100).
  • Показатель wa — ожидание операций ввода/вывода. Высокий показатель означает, что процессор очень долго ждет ответы от устройств ввода/вывода. Чаще всего это связано с большим количеством операций на диске.

mpstat

Более развернутую статистику можно получить используя утилиту mpstat из пакета sysstat:

Покажет детали по всем процессорам на сервере:

Инструмент htop умеет показывать нагрузку на процессор в удобном виде:

Анализ нагрузки на процессор

Если показатель загрузки процессора (us в top’e) превышает 20%, необходимо оценить возможность оптимизации приложения. Если возможная оптимизация уже была выполнена, необходимо приобретать дополнительные сервера.

В случае высокого показателя ожидания I/O (wa в top’e), необходимо провести дальнейший анализ дисковой и сетевой подсистемы (ниже).

Память

Прежде всего необходимо определить количество занятой и свободной памяти:

Покажет данные об использовании памяти:

# Результат команды free

Важно обратить внимание на значение free. Это количество свободной памяти. Очень важным показателем является Swap. Это используемое место на диске в том случае, когда оперативной памяти перестает хватать.

Более подробную информацию об использовании оперативной памяти можно получить так:

Среди прочего увидим такие сведения:

Анализ использования памяти

Малое количество свободной оперативной памяти не является проблемой. Но такая ситуация является предлогом для пристального наблюдения за сервером.

В случае же, если начинает расти Swap, необходимо срочно принимать меры:

  • Добавлять оперативную память.
  • Приобретать новые сервера и распределять нагрузку между ними.

Старайтесь всегда удерживать используемый своп нулевым.

Диски

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

Начать анализ дисков следует с проверки свободного места:

Покажет результат по всем разделам:

Колонка Use покажет занятое место. Для основных разделов старайтесь удерживать значение не выше 90%.

iotop

Инструмент iotop умеет показывать развернутую загрузку диска.

Также будет видно распределение по процессам, которые работают с диском:

Читайте также  Рулевая рейка fenox отзывы

В примере два процесса — mysqld и php-fpm (это php приложение) — используют операции записи на диск. Необходимо обратить внимание на показатели:

  • Actual DISK READ — суммарное фактическое количество данных, читаемых с диска. Отличается от Total DISK READ из-за дискового кэша и оптимизации операций низкого уровня.
  • Actual DISK WRITE — суммарное фактическое количество данных, записываемое на диск. Может отличаться от Total DISK WRITE по той же причине.

Анализ

Чтение

Если диск подвержен большому количеству чтений, правильными вариантами поведения будут:

  • В случае, если большинство чтений происходит из приложения, необходимо включить кэширование APC. Если Ваше приложение читает большое количество файлов, продумайте возможность переноса их данных в кэш.
  • В случае базы данных убедитесь в правильной настройке ее параметров.
  • Если чтения происходят в результате обращения к Web серверу (отдача большого количества файлов), обдумайте возможность использования HTTP кэша.

Запись

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

  • Убедитесь, что у Вас отключены все логи доступа и отладки. Например, access_log в Nginx’e.
  • Большинство записей на диск скорее всего будет генерировать база данных. В таком случае необходимо подумать о выносе ее на отдельный сервер. Дальнейшими шагами будет ее масштабирование на несколько серверов.
  • Большое количество записей также могут генерировать загружаемые файлы. Читайте о масштабирование в таких случаях на примере хранилища изображений.

Утилита cbm позволяет увидеть сетевой трафик в реальном времени:

Увидим данные об объеме приема и передачи в секунду:

Высокий сетевой трафик сам по себе не является проблемой. Но близкие к пиковым показатели указывают на необходимость масштабироваться в ближайшем будущем. Например, средний трафик в 95 Мбит на интерфейсе в 100 Мбит скорее всего будет означать, что текущего сервера вскоре будет недостаточно.

Общая статистика

Удобная утилита dstat покажет общую статистику сервера в реальном времени:

Увидим данные о системе с интервалом в одну секунду:

Внимание следует обратить на:

  • total-cpu-usage — загрузка процессора
  • dsk/total — загрузка диска
  • net/total — загрузка сети

Самое важное

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

Основы оптимизации работы Web сервера

Кэширование динамических сайтов с помощью ESI

Примеры использования Lua в Nginx для решения стандартных задач

Кэширование динамических страниц с помощью SSI

Настройка Nginx для отдачи статических файлов

Как использовать Varnish для кэширования HTTP запросов

Настраиваем Apache на максимальную производительность

Улучшение производительности Web сервера на Ubuntu

Использование Nginx, как кэширующего сервера

Примеры применения Javascript в Nginx’e

Тюнинг Freebsd для повышения производительности Web сервера

Улучшение производительности PHP приложений

Распространенные ошибки конфигурации Nginx, подводные камни и лучшие практики

Как настроить Nginx на максимальную эффективность

Главные возможности нового протокола HTTP/2

Как собирать статистику Nginx при помощи встроенного модуля и Zabbix

Методы улучшения производительности TLS/SSL

Несколько удобных инструментов для анализа производительности серверов

Асинхронные задачи для оптимизации скорости сайта

Рекомендации по настройке Redis для оптимизации ресурсов и повышения стабильности на производственном сервере

Правильное использование ngx.req.get_body_data() для чтения тела запроса

Быстрое и простое введение по кэшированию на PHP и Memcache

3 аспекта эффективного мониторинга для Web приложений

Ссылка на основную публикацию
Adblock
detector