Нагрузка на сервер ошибки в коде

«Превышение нагрузки на хостинг» — письмо, которое нередко получают владельцы сайтов, казалось бы, на ровном месте. В лучшем случае будет предупреждение, в худшем – полная блокировка ресурса, понижение ранжирования и все остальные “приятности” от отключенного сайта.

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

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

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

Хостинг круглосуточно отслеживает потребление ресурсов, поэтому, если максимально допустимый лимит превышен – вас уведомят письмом по электронной почте. После 2-3 предупреждений о росте нагрузки хостер отключает ваш сайт для стабильной работы других ресурсов, размещенных на том же сервере хостинга.

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

Оптимизация нагрузки снизит использование мощностей сервера и позволит сэкономить деньги на приобретении дорогого тарифа. Но не стоит действовать «наугад» — так вы только усугубите проблему. Для начала необходимо разобраться с происхождением сбоев.

Причины повышенной нагрузки на сайт

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

Внешние факторы

1. Поиск уязвимостей сайта 

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

Рост нагрузки отличителен работой внешнего сканера, т.е. на сервер одновременно отправляется большое количество запросов методом POST.

2. Использование вредоносного ПО для взлома админпанели

Одним из наиболее популярных методов – подбор комбинации логин/пароля по словарям. Простые сочетания log/pass по типу admin/admin взламываются на «ура». Поэтому обязательно установите сложный пароль к панели администратора.

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

3. Спам-рассылка

Слабая защита сайта – брешь, через которую хакеры отправляют спам-сообщения, нагружая сервер. Большинство ботов с легкостью обходят стандартную капчу, поэтому нужно использовать более защищенные варианты, например, Google Recaptcha2.

4. Процесс индексации

Все страницы сайта, которые можно найти в поисковых системах, находят в индексе этих поисковых систем. Периодически роботы поисковиков проходят по страницам еще раз на предмет наличия изменений на ваших страницах, это называется “переиндексация”. Но когда роботы одновременно парсят весь сайт, а не отдельные страницы, это увеличивает нагрузку на хостинг в 2-3 раза. Просто так массовая переиндексация не происходит, такой запрос могут отправить злоумышленники, если нашли “дыры”  в вашем сайте, или на сайте разместили какой-то дорвей на десятки тысяч страниц. Притаком процессе также закономерно происходит рост нагрузки на хостинг

5. Парсинг информации с сайта

Теперь граббингом занимаются специальные программы – боты. Они одновременно просматривают все страницы сайта, и копируют оттуда всю информацию. Потом на основе данных создаются клоны, фишинговые сайты.

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

6. Импорт информации, выгрузка товаров в автоматическом режиме

E-commerce сегмент использует специальное программное обеспечение для автоматизации некоторых процессов, например, выгрузки товаров на платформы по типу «Яндекс.Маркет» или PROM.

ПО применяют новостные издания для импорта информации из RSS источников. При этом в 60% случаев контент не статичный – загрузка таких файлов является причиной высокой нагрузки.

7. Продвижение сайта ссылочной массой

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

8. Использование вашего сайта в роли «троянского коня»

Внешний фактор примечателен уязвимостью файла xmlrpc.php. применяя эту брешь, хакеры с помощью вашего ресурса атакуют других. Особенно часто эта проблема встречается у владельцев сайтов, использующих старые версии WordPress.

9. DDOS или резкий скачок посещаемости

Оба варианта имеют несколько похожие свойства. Но все же весомые отличия имеются. В первом случае атака на сервер или хостинг осуществляется для взлома при помощи «компьютеров-зомби», а во втором – потребление мощности растет из-за наплыва посетителей.

Для защиты от DDOS атаки используются инструменты, проксирующие трафик. Утилиты представляют собой сетевой монитор, который отслеживает подозрительные запросы и блокирует их.

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

Определить происхождение трафика несложно – нужно изучить логи, проанализировать запросы, особое внимание обратить на GET и POST. Большинство хостингов поддерживают SSH, что упрощает инспекцию трафика и предоставляют полную информацию о ключевых точках входа. Возможно, увеличенное потребление спровоцировала неправильная работа скриптов – анализ логов даст информацию насчет этого.

Внутренние факторы роста нагрузки на хостинг

К этому классу проблем относятся  причины, лежащие непосредственно на стороне сайта – неправильно написанный или устаревший код JavaScript, настройки, снижающие стабильность сайта.

1. Повышенное использование процессора базой данных MySQL и Apache

Обычно запрос на данные из БД выполняются 2-3 миллисекунды, если время увеличивается до 0,5 секунд, тогда MySQL создает сильную нагрузку на CPU, дисковое пространство. Если проблема именно в этом и хостер ас об этом предупредил, то вы можете запросить логи у хостинга и подчистить базу данных от ненужной информации.

Количество Веб-сервер Apache увеличивает потребление мощности CPU из-за передачи графики, статики, т.е. информации, которая хранится непосредственно на хостинге. Такой нюанс обусловлен особенностями архитектуры Apache – за один запрос отвечает только один поток.

Ваш сайт содержит много данных в виде графиков, диаграмм. Для его обработки веб-сервер запросит значительный объем ресурсов процессора и дисковой системы. Решение этой проблемы заключается в Nginx. Он работает на основе асинхронной архитектуры, способной обрабатывать от 10 запросов одновременно одним процессом. Это упрощает работу с графикой и статистическими данными, снижает нагрузку на хостинг.

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

2. Отсутствие оптимизации JavaScript кода и стремительно увеличивающаяся БД

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

Это же касается не оптимизированного кода JavaScript. Он может использовать устаревшие команды доступа и вызова БД, которые используют много ресурсов. Скрипты могут работать неправильно. Все ошибки, которые возникают в момент запуска кода, сохраняются в логах и не появляются у пользователей. Но есть один важный нюанс – рост количества ошибок нагружает сервер.

Страницы ресурса, насыщенные блоками с информацией, одновременно отсылают десятки запросов на получение одних и тех же данных, и выполнения одинаковых функций. Такая проблема часто встречается в проектах на старых версиях платформ с устаревшими плагинами.

3. Вирусы на сайте

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

Вирусный код переписывает сам себя, автоматически распространяется на другие скрипты, внедряя в них зараженный фрагменты. ВК запускает резидентные процессы, одновременно направляет сотни запросов, без необходимости подключает модули JavaScript к внешним источникам. Это увеличивает потребление мощности хостинга, превышая допустимый лимит.

4. Подключение к приложениям через API

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

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

Как определить причину увеличения нагрузки на хостинг

Качественный мониторинг определит, что конкретно «съедает» производительность сервера и перегружает сервер. Наиболее популярные следующие методики, но они применяются в комплексе:

  • анализ логов

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

Анализ большинства логов проводится через сторонние сервисы по типу Webalizer, но некоторые логи придется вам изучать самостоятельно. Рост потребляемой мощности сервера может возрастать из-за поисковых роботов – анализ логов вам это покажет. Они же покажут, что, возможно, проблема кроется в запуске ресурсоемкого скрипта.

  • аудит кода

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

Суть заключается в том, чтобы обнаружить устаревший и неиспользуемый код, который сильно «режет» производительность. Здесь же изучается SQL – объемные инструкции доступа иногда получается заменить расширенными запросами с однострочным кодом.

  • профилирование

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

Для анализа проблемы с производительностью сервера необходимо провести глубокую проверку на вредоносный код. Нередко именно он является одной из основных причин превышения лимита производительности. Можно использовать абсолютно бесплатную утилиту AI-BOLIT, она покажет наличие вредоносного кода и поможет в очистке от него.

Если его не обнаружено, тогда проводится профилирование JavaScript модулями xhprof, xdebug. Нелишним будет установка защиты от заражения – лучше воспользоваться услугами специалисты информационной безопасности.

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

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

Внешние атаки еще более опасны – они используют уязвимые места сайта для распространения вредоносного кода и «зомбирования» ресурса. Но проблемы можно предотвратить – достаточно включить поддержку cookies и проксирование для фильтрации входящего/исходящего трафика. Суть заключается в блокировании потенциально опасных запросов.

Использование миграционной модели снижает потребление ресурсов сервера на 35-50%. Принцип работы предполагает перенос изображений, скриптов, таблиц стилей на CDN-сервера – они будут загружаться с ближайшего к пользователю дата-центра. Функция кэширования может снять часть нагрузки с сервера, но при серьезных внешних проблемах инструмент не всегда помогает.

Стоит ли переживать?

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

Следует посмотреть логи. Они укажут, в каком направлении искать «корень зла». Дополнительно нужно протестировать скрипты. Во внешнем контуре все хорошо? Не исключено, что проблема «сидит» внутри, как паразит.

Для начала необходимо проверить ваш ресурс на наличие вредоносного кода и поставить защиту. Проанализировать скорость загрузки сайта, посмотреть время обработки запросов к базе данных, заменить старые неоптимизированные методы, на функции, использовать Nginx совместно с Apache для снижения количества запросов.

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

18 ноября 2019

8 982

3

Время чтения ≈ 11 минут

Борьба с нагрузкой на vds

Бесперебойная работа приложений и сервисов напрямую зависит от нагрузки, оказываемой на виртуальный сервер (VPS). Сбои в работе VPS могут вызвать разные причины — от резко возросшей посещаемости до атак киберпреступников.

Снижение эффективности работы ресурсов на VPS далеко не всегда означают, что нужно обязательно решать вопрос нагрузки радикально, покупая более мощную виртуальную машину. Чтобы решить проблему, необходимо выяснить основные причины перегрузки виртуального сервера, а исправить их зачастую можно и без дополнительных трат.

Как протестировать нагрузку на VPS и уменьшить ее самостоятельно расскажем в данной статье.

Что такое нагрузка на VPS

Нагрузка на сервер — количественная оценка характеристик ресурсов хостинга, расходуемых во время выполнения текущих задач. Иными словами, это процент загрузки ресурсов сервера — процессора (CPU), оперативной памяти (RAM или ОЗУ) и дискового пространства.

Борьба с нагрузкой на vds

Виды нагрузки

  1. На базу данных.
    Чем вызвано: тяжелые SQL-запросы, отсутствие оптимизации и некорректные настройки конфигурационного файла.
  2. На веб-сервер.
    Чем вызвано: увеличение посещаемости интернет-ресурса, находящегося на VDS.

Мониторинг виртуального сервера

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

Борьба с нагрузкой на vds - мониторинг

Как проводить мониторинг VPS

Для анализа сетевой активности используется утилита atop. Она записывается в лог событий, в котором можно найти процесс, приводящий к перегрузке сервера.

В Linux Ubuntu утилиту можно установить, воспользовавшись командой из терминала:

sudo apt-get install atop

После инсталляции требуется запустить команду:

sudo atop 1

В терминале отобразится информация, разделенная на две секции. В первой — основная (загруженность CPU, RAM и диска), а во второй — данные о выбранном процессе.

Посмотреть нагрузку на сервер можно при помощи команды:

sudo atop –r

Использование дисковых ресурсов сервера можно увидеть в строке DSK («busy» — процентное соотношение текущего потребления). Если последнее значение эквивалентно 100%, это означает, что проблема заключается в операциях ввода/вывода или использовании самого VDS.

Посмотреть сетевую активность можно при помощи команды:

sudo top

Она выводит список всех процессов, работающих в системе, в режиме реального времени. Обновление экрана происходит каждые 3-4 секунды. В первых строках отображается информация о системе, а ниже — список всех процессов, который упорядочен по убыванию.

Программы для диагностики

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

  1. Простые — показывают время загрузки веб-страницы.
  2. Сложные — могут имитировать подключения из разных мест и производить DDoS-атаку на тестируемое приложение.

Список онлайн-сервисов мониторинга VDS

Борьба с нагрузкой на vds - locust

  • Locust. Масштабируемый инструмент для нагрузочного тестирования, написанный на Python. Отличный способ оценить производительность серверной части ресурса.
  • Host-Tracker. Позволяет выполнить тестирование сервера на нагрузку, одновременно подключаясь из 90 точек со всего земного шара.
  • OpManager. Бесплатная версия сервиса позволяет отслеживать 3 сетевых устройства. С его помощью можно осуществлять проактивный мониторинг состояния сети, серверов, маршрутизаторов и коммутаторов.
  • WebLOAD. Универсальный сервис для мониторинга позволяет проверить все страницы приложения и вывести время загрузки каждой из них. Пользователи на этом ресурсе могут заказать платную оптимизацию сайта.
  • LoadImpact. Выполняет тест нагрузки на сервер, используя одновременно 50 подключений, которые открывают до 20 страниц. Отчет отображается в графическом виде.
  • LoadNinja. Быстрое тестирование нагрузки на сервер, основанное не на виртуальной эмуляции, а на реальном браузере.

Причины перегрузки

Чтобы эффективно снизить нагрузку на VPS, требуется разобраться в причинах ее возникновения. Среди наиболее частых причин эксперты называют резкое увеличение количества посетителей, отсутствие оптимизации программ и СУБД, а также DDoS-атаки сервера.

Увеличение количества посетителей

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

Борьба с нагрузкой на vds - причины перегрузки

Решение № 1 — модернизация

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

Нужен надёжный виртуальные сервер с возможностью масштабирования и защитой от DDоS-атак и круглосуточной техподдержкой? Выбирайте VPS от Eternalhost!

Решение № 2 — оптимизация работы сервера

Снижаем нагрузку на VDS, используя правильные настройки кеширования для Apache и Nginx при помощи правки конфигурационного файла.

Борьба с нагрузкой на vds - оптимизация сервера

Для Apache

Директивы (инструкции), которые управляют кешем Apache, можно прописать в файл виртуального хоста или .htaccess (файл дополнительной конфигурации) проекта. Оптимальным является второй вариант.

Для этого нужно открыть файл .htaccess и внести строки:

<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf|doc|docx)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

Далее требуется активировать Expires-модуль при помощи команды sudo a2enmod expires и перезапустить web-сервер: sudo service apache2 restart.

После этого следует включить модуль, указав:

ExpiresActive On
Для Nginx

Настройка кеширования для web-сервера Nginx заключается в редактировании конфигурационного файла. К его коду нужно добавить:

location ~* .(jpg|jpeg|gif|png|ico|css|swf|flv|doc|docx)$ {
root /var/www/site.ru;
}

Если создать файл «cache.conf» в директории «/etc/nginx/conf.d/», то можно управлять кешированием. В файле указываются параметры, описанные ниже.

  • Директория кеша: proxy_cache_path /var/cache/nginx.
  • Уровень вложенности каталогов: levels=1:2:3.
  • Базовый размер кеша в Мб: keys_zone=static_cache:100m.
  • Время, через которое происходит удаление кеша (мин): inactive=120m.
  • Указание максимального размера данных, подлежащих кешированию в Мб: max_size=500M.
  • Количество обращений к серверу: proxy_cache_min_uses 1.

После настройки файла, сервер нужно перезапустить, воспользовавшись командой:

sudo service nginx restart

Оптимизация программ, сервисов и СУБД

Скорость работы VDS зависит от настройки скриптового языка PHP, который генерирует контент для приложения, осуществляет подключение и работу с СУБД.

Борьба с нагрузкой на vds - модернизация программ

Решение № 1 — настройка скриптового языка PHP

Снижение нагрузки на VDS достигается при помощи грамотно настроенного PHP. Для его настройки нужно найти файл «php.ini», воспользовавшись поиском файлов на сервере. Далее его следует скачать, открыть в любом редакторе и изменить параметры, указанные ниже.

always_populate_raw_post_data = Off
output_buffering = On
; variables_order
; Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS"
date.timezone = Europe/Moscow
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.enable_cli=0

После этого необходимо перезапустить сервер, воспользовавшись командой из консоли sudo service apache2 restart или sudo service php5-frm restart.

Решение № 2 — оптимизация MySQL

Для оптимизации MySQL требуется открыть файл «my.conf», который находится в директории с установленной СУБД «/etc/». Затем параметры нужно изменить таким образом:

log-slow-queries=/var/log/mariadb/slow_queries.log
long_query_time=5
log-queries-not-using-indexes=1
query_cache_size=0
query_cache_type=0
query_cache_limit=1M
tmp_table_size=16M
max_heap_table_size=16M
thread_cache_size=16
skip-name-resolve=1
innodb_buffer_pool_size=800M
innodb_log_file_size=200M

После внесения изменений файл требуется сохранить, а в терминале запустить движок СУБД MariaDB при помощи команды «sudo systemctl start mariadb».

Решение № 3 — ограничение индексации

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

Например, статьи, не содержащие полезную информацию, можно смело скрывать от роботов поисковых систем при помощи текстового файла «robots.txt».

Пример robots.txt

User-agent: *
Disallow: /cgi-bin          # классика...
Disallow: /?                # все параметры запроса на главной
Disallow: /wp-              # все файлы WP: /wp-json/, /wp-includes, /wp-content/plugins
Disallow: *?s=              # поиск
Disallow: *&s=              # поиск
Disallow: /search           # поиск
Disallow: /author/          # архив автора
Disallow: */embed           # все встраивания
Disallow: */page/           # все виды пагинации
Allow: */uploads            # открываем uploads
Allow: /*/*.js              # внутри /wp- (/*/ - для приоритета)
Allow: /*/*.css             # внутри /wp- (/*/ - для приоритета)
Allow: /wp-*.png            # картинки в плагинах, cache папке и т.д.
Allow: /wp-*.jpg            # картинки в плагинах, cache папке и т.д.
Allow: /wp-*.jpeg           # картинки в плагинах, cache папке и т.д.
Allow: /wp-*.gif            # картинки в плагинах, cache папке и т.д.
Allow: /wp-*.svg            # картинки в плагинах, cache папке и т.д.
Allow: /wp-*.pdf            # файлы в плагинах, cache папке и т.д.
Allow: /wp-admin/admin-ajax.php
#Disallow: /wp/             # когда WP установлен в подкаталог wp

Sitemap: http://example.com/sitemap.xml    
Sitemap: http://example.com/sitemap2.xml    # еще один файл
#Sitemap: http://example.com/sitemap.xml.gz # сжатая версия (.gz)

# Версия кода: 1.1
# Не забудьте поменять `site.ru` на ваш сайт.

Решение № 4 — сжатие изображений

Для оптимизации ресурса любые графические файлы следует сжимать специальными сервисами. Это позволяет увеличить скорость открытия веб-страниц и уменьшить нагрузку на VDS. Подробнее об этом можно почитать в отдельной статье.

Решение № 5 — лимиты скачивания

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

Решение № 6 — ошибки в программном коде

Неверный код, на котором написано web-приложение, является основной причиной нагрузки на VDS. За помощью требуется обратиться к программисту или найти ошибки самостоятельно.

Решение № 7 — использование легкой CMS

Нагрузка, оказываемая на виртуальный сервер, зависит от CMS, которая на нем установлена. WordPress — универсальное решение, которое рекомендуют специалисты для большинства типов сайтов. Её главные достоинства — простота установки, нетребовательность к ресурсам и стабильность выпускаемых модулей.

Кибератаки

Борьба с нагрузкой на vds - кибератаки

DDoS-атаки киберпреступников могут привести к существенной перегрузке сервера. Основным способом защиты является механизм фильтрации входящего трафика, который обеспечивает хостер.

Заключение

Постоянные мониторинг и диагностика нагрузки на VDS, а также оптимизация программного обеспечения и СУБД способны предотвратить его перегрузку. Если это произошло, то необходимо провести настройку веб-сервера, оптимизировать работу СУБД и настроить PHP.

Оцените материал:


[Всего голосов: 5    Средний: 5/5]

С сайта контакты в amoCRM добавляется через раз.

Проверил кучу раз скрипты, всё верно. Ошибок нет.
Плюс ко всему, думаю, что если в скрипте ошибки,
то контакты не будут передаваться вообще.
Может ли проблемой быть высокая нагрузка на сервер?

И вообще, высокая ли это нагрузка? Хостинг самый дешевый:

введите сюда описание изображения

Код самого файла, передающего сделки и контакты:

    <?php
$leads['request']['leads']['add']=array(
  array(
    'name'=>$new_lead_title,
    'status_id'=>7829006,
    'responsible_user_id'=>$lead_user_new,

    'custom_fields'=>array(

     array(
        'id'=>1404981,
        'values'=>array(
          array(
            'value'=>$form
          )
        )
      ),

      array(
        'id'=>1404975,
        'values'=>array(
          array(
            'value'=>$_POST['city']
          )
        )
      ),

      array(
        'id'=>1404977,
        'values'=>array(
          array(
            'value'=>$_POST['urlsite'] 
          )
        )
      ),

      array(
        'id'=>1404979,
        'values'=>array(
          array(
            'value'=>$_POST['keyword']
          )
        )
      )

    )
  )
);

$link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/leads/set';
$curl=curl_init();

curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
curl_setopt($curl,CURLOPT_URL,$link);
curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($leads));
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt');
curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt');
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);

$out=curl_exec($curl);
$code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
CheckCurlResponse($code);

$Response=json_decode($out,true);
$newleadid = $Response['response']['leads']['add'][0]['id'];

$contact=array(
            'custom_fields'=>array()
        );

    if(!empty($_POST['phone']))
    $contact['custom_fields'][]=array(
        'id'=>1138130, 
        'values'=>array(
          array(
            'value'=>$_POST['phone'],
            'enum'=>'OTHER'
          )
        )
      );

    if(!empty($_POST['email']))
    $contact['custom_fields'][]=array(
        'id'=>1138132, 
        'values'=>array(
          array(
            'value'=>$_POST['email'],
            'enum'=>'OTHER'
          )
        )
      );

if(isset($contactid) && !empty($contactid))
{
$contact['linked_leads_id'] = Array($newleadid);
$contact['id'] = $contactid;
$contact['last_modified'] = time();
$contact_params=Array();
$contact_params['request']['contacts']['update'][]=$contact;
}
else
{
$contact['name'] = "Новый клиент";
$contact['responsible_user_id'] = $lead_user_new;
$contact['linked_leads_id'] = Array($newleadid);
$contact_params=Array();
$contact_params['request']['contacts']['add'][]=$contact;
}

$link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/contacts/set';
$curl=curl_init();

curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
curl_setopt($curl,CURLOPT_URL,$link);
curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($contact_params));
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
curl_setopt($curl,CURLOPT_HEADER,false);
curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt');
curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt');
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);

$out=curl_exec($curl);
$code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
CheckCurlResponse($code);

?>

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

Что такое нагрузка на сайт?

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

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

На этом примере видно, как снижалось время ответа при росте посетителей ресурса.

Причины превышения допустимой нагрузки на сайт

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

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

В таблице ниже перечислены основные причины и степень их влияния на работоспособность:

Внутренние причины

Внешние причины

Степень влияния

Неоптимизированный код

Увеличение посещаемости сайта

Высокое

Неправильная настройка сервера

Парсинг сайта

Среднее

Проблемы с базой данных

Атаки DDoS

Высокое

Недостаточная емкость сервера

Неправильно настроенные запросы

Среднее

Неэффективное использование ресурсов сервера

Ошибки в коде клиента

Низкое

Для предотвращения таких проблем веб-разработчикам следует учитывать возможные причины перегрузки сервера и принимать соответствующие меры, чтобы оптимизировать код, настроить сервер и базу данных, и обеспечить должную емкость.

Что такое «тестирование нагрузки сайта»?

Тестирование нагрузки сайта – это процесс проверки производительности с помощью симуляции повышенного количества запросов. Цель: оценка производительности в условиях повышенного спроса и определение точки, когда ресурс перестает работать стабильно. Данная практика помогает определить максимальную нагрузку, которую сайт может выдержать, и выявить узкие места в работе веб-приложения.

Задачи нагрузочного тестирования:

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

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

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

Виды нагрузочного тестирования

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

  • Стрессовое (Stress Testing) – это вид тестирования, в ходе которого производится проверка производительности веб-приложения при экстремально высоких нагрузках. Цель: проверка степени устойчивости веб-приложения при перегрузке, а также определение предела его работоспособности. В ходе стрессового тестирования генерируется максимально возможная нагрузка, чтобы проверить, как сервер справляется с работой. Данная практика позволяет выявить узкие места в работе веб-приложения, а также проблемы, связанные с производительностью и стабильностью.
  • Объемное (Volume Testing) – это вид тестирования, в котором проверяется производительность веб-приложения при работе с большим объемом данных. Цель:  проверка способности сайта обрабатывать большое количество данных. При проведении работ проверяется, как веб-приложение обрабатывает большой объем информации, оценивается производительность базы данных, быстродействие запросов, отображение и обработка информации. В процессе тестирования используются различные объемы данных, которые находятся в пределах допустимого диапазона для данного веб-приложения.
  • Тестирование стабильности или надежности (Stability/Reliability Testing) – это вид тестирования, в котором проверяется производительность веб-приложения при продолжительной работе. Цель: проверка степени надежности и устойчивости сайта в условиях продолжительной работы. В ходе проверки генерируется постоянная нагрузка, чтобы проверить, как сервер справляется с продолжительной работой. Тестирование стабильности позволяет выявить проблемы, связанные с производительностью и устойчивостью ресурса в условиях продолжительной работы.

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

Инструменты нагрузочного тестирования

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

  1. Apache JMeter – это бесплатный инструмент, который позволяет создавать и моделировать высокую нагрузку на веб-приложение. Сервис имеет графический интерфейс, который облегчает создание и настройку тестовых сценариев. Apache JMeter поддерживает различные протоколы, включая HTTP, FTP, SOAP, JDBC и другие.
  2. LoadRunner – это коммерческий инструмент, который предоставляет обширный набор функциональных возможностей для проведения нагрузочного тестирования. Может использоваться для создания и моделирования высокой нагрузки на веб-приложение и предоставляет возможность анализа результатов.
  3. Gatling – это бесплатный инструмент, который предназначен для создания и моделирования высокой нагрузки на веб-приложение. Поддерживает протоколы HTTP и WebSocket и имеет графический интерфейс, который облегчает создание и настройку тестовых сценариев.
  4. BlazeMeter – это облачный инструмент, который позволяет проводить нагрузочное тестирование веб-приложения без необходимости установки специального программного обеспечения. BlazeMeter обеспечивает быстрое создание и моделирование высокой нагрузки на веб-приложение и предоставляет возможность анализа результатов тестирования.

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

Как провести нагрузочное тестирование сайта

Рассмотрим пошаговую инструкцию для проведения нагрузочного тестирования на примере сайта alto.codes. Инструмент: Azure Load Testing.

Шаг 1: Определение целей и требований

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

Цели нагрузочного тестирования:

  1. Измерить максимальную производительность ресурса при определенной нагрузке.
  2. Измерить и оценить время отклика при нагрузке, чтобы понять, насколько быстро сайт будет загружаться для пользователей при высоком трафике.
  3. Определить проблемные места, которые могут привести к снижению производительности или отказам сайта.
  4. Определить оптимальную конфигурацию сервера и базы данных для поддержки требуемой нагрузки.
  5. Проверить работу в условиях, максимально приближенных к реальной нагрузке, и убедиться в том, что сайт работает без сбоев.

Задачи нагрузочного тестирования:

  1. Создать тест-план для генерации требуемой нагрузки, который будет содержать различные сценарии использования сайта.
  2. Измерить время отклика сайта и пропускную способность при разной нагрузке.
  3. Определить проблемные места в работе сайта, которые могут привести к снижению производительности или отказам.
  4. Провести анализ результатов и выявить узкие места, которые нужно оптимизировать.
  5. Сделать выводы и рекомендации по улучшению производительности сайта и его конфигурации.

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

Шаг 2: Выбор инструментов

Для проведения нагрузочного тестирования необходимо выбрать соответствующие инструменты. В зависимости от целей и требований могут быть использованы Apache JMeter, LoadRunner, Gatling и другие сервисы. Мы воспользовались сервисом Azure Load Testing.

Шаг 3: Создание тестовых сценариев

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

Шаг 4: Настройка тестовых сценариев

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

Шаг 5: Указали критерии отказа теста на основе метрик клиента.

Когда нагрузочный тест превышает пороговое значение для метрики, статус меняется на Failed.

Шаг 6. Запуск и настройка количества экземпляров механизма тестирования

Шаг 7. Мониторинг производительности приложения во время теста, используя инструменты мониторинга в Azure.

Шаг 8: Анализ результатов

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

Шаг 9: Отчет и документирование

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

Отчет о нагрузочном тестировании сайта

Цель тестирования: оценить производительность сайта при высокой нагрузке.

Методология тестирования: использовался инструмент Azure Load Testing для имитации высокой нагрузки на сайт. Тестирование проводилось в течение 1 часа с использованием различных сценариев использования сайта.

Характеристики сервера:

  • Процессор: Intel Xeon E5-2670v4 2.2GHz (16 ядер)
  • Оперативная память: 64 ГБ
  • Хранилище: SSD 1 ТБ
  • Операционная система: CentOS 7

Результаты тестирования:

Сценарий 1: Главная страница

  • Количество одновременных пользователей: 100
  • Среднее время ответа: 1,2 секунды
  • Максимальное время ответа: 4,5 секунды
  • Количество ошибок: 0
  • Процент успешных запросов: 99%

Сценарий 2: Регистрация нового пользователя

  • Количество одновременных пользователей: 50
  • Среднее время ответа: 2,1 секунды
  • Максимальное время ответа: 6,3 секунды
  • Количество ошибок: 2
  • Процент успешных запросов: 96%

Сценарий 3: Просмотр статьи

  • Количество одновременных пользователей: 200
  • Среднее время ответа: 0,9 секунды
  • Максимальное время ответа: 3,2 секунды
  • Количество ошибок: 1
  • Процент успешных запросов: 99,5%

Сценарий 4: Загрузка файла

  • Количество одновременных пользователей: 20
  • Среднее время ответа: 3,8 секунды
  • Максимальное время ответа: 11,2 секунды
  • Количество ошибок: 3
  • Процент успешных запросов: 85%

Выводы:

  • Сайт https://alto.codes/ показал хорошую производительность при низкой и средней нагрузке.
  • При высокой нагрузке производительность сайта снижается, но количество ошибок остается низким.
  • Сайт нуждается в оптимизации для улучшения производительности при высокой нагрузке.

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

Код ответа ошибка сервера: причины, последствия и что с этим делать

HTTP-статусы 5ХХ означают, что работоспособность сайта нарушена. Они могут свидетельствовать о недоступности сервера, превышении лимита ожидания ответа, отсутствии сетевой аутентификации или других трудностях с отображением страницы.  

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

Как узнать о проблеме и посмотреть примеры страниц с кодами статусов 5XX? 

В Яндекс Вебмастере появилось новое уведомление, благодаря которому вы сможете сразу узнать о страницах с проблемным кодом. Чтобы посмотреть примеры таких страниц: 

  1. Перейдите в Вебмастер в раздел Диагностика. 
  2. Найдите нужный алерт («Некоторые страницы сайта часто отвечают HTTP-кодом 5хх»). 
  3. Нажмите на ссылку «Посмотреть примеры страниц» — откроется список страниц с такими кодами. 

Подпишитесь на получение оповещений из Диагностики и укажите тип Рекомендации — тогда при возникновении проблем на сайте вы будете получать соответствующие уведомления. 

Почему на сайте может возникать много страниц со статусами 5XX? 

  1. Ошибки в скриптах сайта, то есть сценариях, созданных для автоматического выполнения задач или для расширения функционала сайта. 
  2. Нехватка оперативной памяти при выполнении скрипта. 
  3. Ошибки в коде CMS, системы управления содержимым сайта. В 80% случаев виноваты конфликтующие плагины. 
  4. Большая нагрузка на сервер, с которой он не справляется и возвращает код ответа 5XX. 

Можно ли настраивать код 5ХХ для ненужных страниц сайта? 

Не стоит намеренно использовать коды 5ХХ для того, чтобы удалить ненужные страницы из поиска и сделать их недоступными для пользователей. Такие статусы робот воспринимает как индикатор наличия серверных ошибок с нагрузкой, что может привести к снижению общей скорости обхода сайта и обновления его контента.  

 
Что делать, если страниц с кодами статусов 5XX стало больше? 

  • Проверить ссылки, у которых появились ошибки 5ХХ в свежих данных ответа. 

Если они доступны: проверить ответ сервера и последних логов в Вебмастере и на сервере, добавить ссылки переобход. 

Если они недоступны: проверить настройку сервера на предмет доступности и возможную блокировку запросов роботов по User-Agent. 

  • Использовать инструмент «Скорость обхода» в Вебмастере, чтобы снизить допустимое число обращений в секунду. 
  • Настроить HTTP-код ответа 429 для случаев, когда нагрузка стала слишком большой. 
  • Обратиться к хостинг-провайдеру, если проблему решить не удалось.

Подробнее об HTTP-статусах можно прочитать в Справке. 

P. S. Подписывайтесь на наши каналы
Блог Яндекса для Вебмастеров
Канал Яндекса о продвижении сайтов на YouTube
Канал для владельцев сайтов в Яндекс.Дзен

Понравилась статья? Поделить с друзьями:
  • Название ошибок на панели приборов
  • Нагреватель датчика кислорода не пройден что это значит ошибка
  • Название ошибок в синтаксическом разборе предложения
  • Нагреватель baxi ошибка e10 что делать
  • Название ошибок в русском языке с примерами