Причины высокой нагрузки на VPS/VDS
13:15, 03.12.2021
Из-за чрезмерного повышения нагрузки виртуальный сервер может начать «задыхаться» – он попросту не будет успевать обрабатывать все входящие запросы и выполнять поставленные задачи. Как следствие, будут возникать задержки при работе сервера, а скорость загрузки страниц сайта снизится до неприемлемых значений. В этой статье мы расскажем о том, какие причины могут спровоцировать это, как провести анализ для оценки нагрузки на VDS и VPS сервере, и какие есть пути решения проблемы.
Анализ работы сервера
Прежде всего стоит рассмотреть и исключить самые очевидные и естественные причины, по которым нагрузка на VPS и VDS стабильно стопроцентная:
- Большой прирост посетителей сайта. Если стратегия продвижения работает, количество посетителей сайта непременно увеличится, а вместе с тем возрастают и нагрузки на серверную инфраструктуру. Просмотреть информацию и статистику по посещаемости можно в любой панели управления – например, в ISPmanager или в cPanel. Обе панели содержат инструментарий для сбора статистических данных, вам лишь нужно перейти в раздел с соответствующей метрикой.
- Плохая оптимизация программного обеспечения. Если службы, сервисы и утилиты на сервере настроены криво, это вполне может спровоцировать конфликты и глюки сервера, вплоть до утечек памяти.
- Злонамеренные действия хакеров – DoS или DDoS атаки. В этом случае вредоносные боты вполне могут довести сервер до состояния отказа, из-за чего доступ к сайту для добросовестных посетителей будет невозможен.
Естественный прирост посещаемости от DDoS отличить довольно легко – в случае целенаправленной атаки количество посетителей увеличивается в несколько раз практически мгновенно. При естественном росте так не бывает, ведь в этом случае график роста посещаемости будет плавным.
Если высокая нагрузка на сервер обусловлена естественными причинами, то решение одно – масштабировать мощности. Нужно обращаться к хостинг-провайдеру и договариваться об увеличении аппаратных мощностей сервера – процессора, оперативной памяти и т.д.
Утилиты NIX
Раздел статистики встроен практически во всех панели управления, но порой этих данных недостаточно для более глубокого анализа работы сервера. В этом ключе идеальным инструментом являются утилиты *NIX – чтобы получить развернутую информацию по серверу в режиме реального времени, нужно ввести в консоль команду top. Не все дистрибутивы содержат данную утилиту по умолчанию, так что сперва может потребоваться установка. Для Ubuntu команда будет выглядеть так:
$ sudo apt install top
Запустить её можно будет всё той же командой
$ top
Теперь пройдемся по основным её опциям, которые вам могут быть полезны при анализе работы сервера:
- -v – узнать версию ПО;
- -b – в этом режиме программа будет только выводить данные и станет недоступна для ввода интерактивных команд;
- -c – отобразить путь к исполняемым файлам команд;
- -H – активация вывода потоков процессов;
- -i – скрыть процессы, не использующие ресурсы процессора, помогает отсеять всё лишнее и сокращает время поиска;
- -o – поле, по которому надлежит сортировать процессы;
- -O – отобразить все доступные поля;
- -p – отслеживание указанных процессов по PID, можно задать сразу несколько;
- -u – отображать лишь те процессы, что запущены от имени указанного пользователя.
После запуска утилиты вы увидите подробную статистику по загрузке процессора и оперативной памяти, количестве запущенных процессов, а также сведения по количеству свободной и занятой физической памяти на сервере. С помощью перечисленных выше клавиш вы можете активировать необходимые опции для фильтрации и мониторинга процессов.
Apache
Apache – программное обеспечение, служащее для размещения веб-серверов. Является связующим звеном между пользователем и сервером – как только человек посещает страницу сайта и делает какой-то запрос, в работу вступает Apache – он находит искомые данные и отправляет их обратно пользователю. По тому же принципу работает и в обратную сторону.
Одним из возможных сценариев использования Apache является сбор и анализ статистики по нагрузке на процессор и другие компоненты сервера. Но главным достоинством веб-сервера является то, что с помощью его модулей можно выявить некорректно работающие скрипты, которые также могут стать причиной повышенной нагрузки на сервер. Отладить их работу сможет разработчик или системный администратор, если обладает соответствующим опытом. Для трассировки необходимо использовать расширения xdebug или xhprof.
Веб-сервер Apache хорошо подходит для размещения крупных проектов, он совместим с серверами на ОС CentOS, Debian, FreeBSD и любых других. Благодаря модульной структуре программного обеспечения вы в любой момент можете подгружать отдельные элементы, расширяя стандартный функционал по необходимости. Всего для Apache разработано свыше 500 модулей. Часто популярные веб-приложения сразу поставляются в виде модулей для Apache – например, те же панели управления ISPmanager и VDSmanager.
Единственный нюанс в том, что для грамотной работы с Apache требуется определенный уровень грамотности в области IT. Потребуются хотя бы основы базового программирования и администрирования веб-серверов.
Лог-файлы
Продвинутые администраторы могут использовать логи – файлы, в которых протоколируются все события на сервере. Файлы журналов могут относиться к категориям приложений, событий, служб и системных, и каждая из этих категорий в теории может быть причиной повышенной нагрузки на VDS и VPS сервер. Как правило, в Linux-подобных системах логи находятся в директории /var/log. Вот немного информации о тех логах, которые вам могут быть полезны для определения причин повышенной нагрузки на сервер:
- /var/log/syslog или /var/log/messages – здесь содержится глобальный системный журнал, где ведутся записи начиная с первого запуска системы. Записи ведутся о ядре Linux, различных службах, обнаруженных устройствах, сетевых интерфейсах и т.д.
- /var/log/auth.log или /var/log/secure — сюда вносятся сведения об авторизации пользователей, причем как удачные, так и неудачные попытки с указанием метода аутентификации.
- /var/log/dmesg — данные по драйверам устройств. Этот журнал имеет ограниченный размер, и когда он достигнет своего предела, старые сообщения будут перезаписаны более новыми. С помощью ключа --level= администратор может фильтровать данные по важности.
- /var/log/boot.log — содержит данные о событиях, что происходят при запуске ОС. Может быть полезен для выявления скрытых вирусов, которые находятся в автозагрузке.
- /var/log/cron — весьма полезный отчет службы crond, содержит данные про исполняемые команды и сообщения от этих команд.
- /var/log/faillog — сведения о неудачных попытках авторизации. Крайне полезен во время выявления угроз и дыр в системе безопасности, а также при хакерских атаках и попытках взлома методом перебора – особенно если у вас не активирована аутентификация по SSH. Для получения доступа к содержимому используется команда faillog.
- var/log/kern.log — здесь содержатся сообщения от ядра и предупреждения. Их можно использовать в процессе устранения ошибок модулей, которые встроены в ядро системы.
- /var/log/maillog/ или /var/log/mail.log — информация по почтовому серверу.
Вручную изучать логи – дело муторное, но благодарное, так как в теории это позволяет выявить малейшие ошибки, чтобы в будущем их устранить и оптимизировать работу VPS.
Основные причины нагрузки на сервер
Рассмотрим поочередно все основные и наиболее распространенные причины, способные спровоцировать повышенную нагрузку на сервер.
Неправильная настройка ограничений веб-сервера
Проверить, корректно ли у вас настроены ограничения, можно с помощью мониторинга значений MaxClients и MaxSpareServers. Чтобы их посмотреть, нужно ввести в консоль команду top, о ней мы подробно рассказывали выше.
Рассчитать оптимальные значения можно с помощью простой формулы:
MaxClients = M*0.8/H
M – это у нас общее количество памяти, а H – объем памяти, который потребляет какой-то один веб-процесс. Оптимальные значения не должны быть выше 10. Для ограничения можно воспользоваться соответствующим конфигурационным файлом Apache:
- На Debian — /etc/apache2/apache2.conf;
- На Centos — etc/httpd/conf/httpd.conf;
- На FreeBSD — /usr/local/etc/apache22/extra/httpd-mpm.conf.
Выставлять чересчур низкие значения тоже не стоит, иначе входящие и исходящие запросы не смогут выполняться с нормальной скоростью, или вовсе будут приостановлены. Конфигурировать эти файлы нужно внимательно, четко понимая, сколько у вас на виртуальном сервере ресурсов, и как их грамотно распределить, чтобы оптимизировать работу.
Чтобы было понятнее, рассмотрим пример. Предположим, мы имеем сервер с 16 Гб ОЗУ. Две трети от 16 – это 10.6 Гб. В среднем один процесс на веб-сервере потребляет около 40-60 Мб памяти. 10600 делим на 60, получаем 176 Мб, округляем в меньшую сторону и прописываем значение 175. В результате блок конфигурационного файла для Apache должен выглядеть так:
StartServers 5
MinSpareServers 5
MaxSpareServers 20
MaxClients 175
MaxRequestsPerChild 0
Ну и небольшие пояснения вдогонку. Параметр StartServers определяет количество дочерних процессов, которые создаются в момент запуска сервера. MinSpareServers – это минимальное количество неиспользуемых дочерних процессов, которые ожидают потенциальный запрос. MaxSpareServers – то же самое, только это максимальное количество запасных процессов. Самым важным параметром здесь является MaxClients, именно на него и обращать внимание в первую очередь, так как он определяет верхний предел одновременно запущенных процессов.
Отдельно стоит сказать о параметре MaxRequestsPerChild – он устанавливает лимит на количество соединений, которое может обработать дочерний процесс. Очень полезен при утечках памяти на сервере Apache и его библиотек. Обычно указывают 0, так как другие значения могут приводить к некорректной работе веб-сервера.
DDoS-атака
Метод, которым конкуренты или просто недоброжелатели могут воспользоваться, чтобы скачкообразно повысить нагрузку на тот или иной сервер с одной единственной целью – довести его до отказа и сделать сайт недоступным для пользователей. Защититься от DDoS можно разными способами, но самый простой – закрыть все порты, кроме трех:
- 80 (HTTP) и 443 (HTTPS) – они используются посетителями вашего сайта, то есть живыми людьми.
- SSH – его использует администратор, и он не может стать уязвимым местом в случае DDoS, если только хакер не знает номер этого порта. По этой причине его желательно переназначить со стандартного 22 на какое-нибудь пятизначное число – например, 58941.
Проще говоря, вы должны удостовериться, что доступ к приложению или ресурсам открыт только для портов, протоколов или приложений, взаимодействие с которыми предусмотрено администратором. Также стоит позаботиться о реализации трех основных методах защиты от DDoS: на границе сети, с помощью локального центра очистки, и с помощью перенаправления трафика в облако.
Огромная посещаемость проекта
Положительная и вполне естественная причина – если ваш проект успешно растет и развивается, то прирост посетителей сайта неизбежно спровоцирует увеличение нагрузки на сервер, вплоть до появления проблем с производительностью. Решение простое – масштабировать мощности, перейти на более мощный VDS. По этому вопросу обращайтесь к специалистам HostZealot, мы введем в курс дела и всё расскажем подробнее.
Иногда высокая посещаемость может быть вызвана ботами, которые никакой пользы вам не принесут за счет повышения трафика, но ресурсов будут потреблять порядочно. Обезопасить VPS от них можно через файл robots.txt или .htaccess.
Неправильная работа скриптов
Неоптимальное распределение ресурсов между скриптами вполне может спровоцировать задержки и тормоза при работе сервера, это мы уже отмечали ранее. Для отслеживания и отладки «кривых» скриптов можно воспользоваться расширениями xdebug или xhprof. Также можно установить nginx в связке с APC.
MySQL создает нагрузку на диск
Когда в буфере не хватает свободного места для выполнения сложных процессов, сервер будет обращаться к диску, чтобы на нем разместить временные файлы. Для решения этой проблемы следует увеличить размер памяти, выделяемый под временные таблицы tmp_table_size и max_heap_table_size через файл настроек my.cnf.
Попробуйте установить значение на 32 МБ и посмотрите, как ведет себя переменная Created_tmp_disk_tables – чем ниже будет её значение, тем лучше.
MySQL создает нагрузку на процессор
В этом случае проблема может быть спровоцирована проблемными индексами или таблицами – следует проверить логи и таблицы в phpMyAdmin.
Почтовый сервер создает нагрузку
Если ваш сервер заражен вредоносным кодом, он может начать рассылать спам на сотни различных адресов, и весь этот банкет за счет ваших серверных мощностей. Вот, что следует предпринять:
- Проверить очередь исходящих писем.
- Просканируйте систему на предмет вирусов и других угроз.
- Поменяйте все пароли на более сложные.
Может быть и такое, что ваши пользователи специально рассылают большое количество писем, так что этот момент тоже стоит проверить.
Tar и gzip создают нагрузку
Неправильно настроенное резервное копирование может провоцировать нагрузку на сервер в самый неподходящий момент. Чтобы избежать таких казусов, функцию можно отключить или перенастроить так, чтобы резервирование данных происходило в те часы, когда нагрузка на сайт минимальна.
Неизвестные процессы
Самая непредсказуемая ситуация, когда невозможно наверняка определить, какие процессы нагружают веб-сервер. Происходит это чаще всего в результате взлома, поэтому нужно срочно предпринять все меры по устранению угрозы и повышению безопасности сервера:
- проверить файловую систему на предмет вирусов;
- изучите логи;
- сменить все пароли на более сложные;
- проверьте VPS на наличие шеллов;
- актуализируйте версию CMS на вашем VPS.
Также вы можете обратиться к администратору хостинга, чтобы получить более подробную консультацию и помощь с решением возникшей ситуации.