159  /  175

Стабилизируем Back-end по расходу оперативной памяти

Просмотров: 1185 (Статистика ведётся с 06.02.2017)
Дата последнего изменения: 26.09.2015

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

Для стабилизации системы по расходу памяти и минимизации числа запущенных процессов Back-end мы рекомендуем в настройках сервера Apache установить параметр MaxClients в значении от 5 до 50, в зависимости от объема оперативной памяти. Значение этого параметра не должно превышать 80% от объема доступной памяти сервера за вычетом памяти, выделенной под СУБД. Устанавливая MaxClients, вы ограничиваете возможное число одновременно запущенных процессов Back-end. Тем самым, удается поставить жесткий лимит по потреблению памяти и исключить выход машины из строя при стрессовых нагрузках.

Пример поведения сервера при неправильно установленном MaxClients

Зависание сервера при слишком большом значении MaxClients:

На приведенном скриншоте произошло следующее:

Запущена команда top в Linux, показывающая объем занятой и свободной памяти, число выполняющихся процессов и объем памяти, занимаемый ими. В данном примере достаточно посещаемый веб-сайт работал на мощном сервере с двумя 4-х ядерными процессорами и 5 Гб оперативной памяти. Размер swap-файла – 4 Гб.

MaxClients был установлен в 100. Каждый процесс Apache занимал около 250 Мб, что привело к полному исчерпанию и оперативной памяти, и файла подкачки на 40 процессах Apache. В связи с отсутствием доступной памяти процессоры сервера не смогли справиться с нагрузкой и сервер зависал.

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

Методика подбора параметра

Методика подбора может быть следующей. Посчитайте, сколько памяти у вас занимает один Back-end процесс. Например, 50 Мб. Если мы установим MaxClients равным 4, значит максимальное потребление памяти может составить 200 Мб. Для машины с 512 Мб оперативной памяти MaxClients желательно выбрать между 5-10. Для правильной конфигурации Front-end, когда вся статика обрабатывается без участия Back-end, это позволит вполне комфортно обрабатывать порядка 50 тысяч хитов в сутки или примерно 10-20 тысяч уникальных пользователей.

Для крупных проектов с конфигурациями из двух машин или при наличии больших объемов памяти рекомендуется производить выбор значения MaxClients в процессе нагрузочного тестирования.

Важно! Подбирайте MaxClients так, чтобы система при стрессовых нагрузках потребляла не более 90% процессорных ресурсов и никогда не доходила до 100%. Это позволит вам стабилизировать использование процессорных ресурсов и быть уверенным, что не начнется общая регрессия по производительности во время пиковых нагрузок.

Обратите внимание, что очень важно настраивать время ожидания для Front-end таким образом, чтобы при отсутствии свободных процессов в Back-end, Front-end ожидал освобождения ресурсов. Тем самым организуется очередь запросов, и Back-end защищается от перегрузки.

Так же рекомендуется подбирать параметры управления процессами Back-end в соответствии с установленным лимитом MaxClients. Например, если MaxClients = 5, тогда рекомендуется установить:

MinSpareServers 5 
StartServers 5 
MaxClients 5

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

Совет! Рекомендуется для начала выбирать минимальное значение MaxClients, например, 5. В процессе работы проекта проверять время исполнения страницы. Если на быстром канале наблюдается ситуация, когда время выполнения страницы (параметр ?show_page_exec_time=Y) в пиковые моменты показывает стабильно минимальное значение, а визуально мы наблюдаем существенную задержку перед открытием страницы, то это может свидетельствовать о нехватке процессов Back-end. Иными словами о том, что запросы принимаются Front-end и долго удерживаются в ожидании высвобождения Back-end процессов.

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

MaxClients и базы данных

Еще одно преимущество использования MaxClients связано с базами данных.

Наличие лимита позволяет включить постоянное соединение к базе данных (только если у вас свой сервер с 1-2-я проектами) и уменьшить время соединения с базой данных и число работающих процессов базы данных. Если величина параметра MaxClients меньше или равна максимальному числу соединений с базой данных, то это гарантирует, что никогда не будет запущено больше этого числа процессов Back-end. Следовательно к базе данных не будет открыто больше соединений. Фактически, всегда в памяти будут находиться MaxClients загруженных процессов Back-end с открытыми соединениями к базе данных, готовые к обработке запросов.

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

Еще раз подчеркнем, что соблюдение этих рекомендаций позволяет:

  • Стабилизировать конфигурацию по расходу памяти при любых нагрузках;
  • Защитить сервер от процессорных перегрузок и общей регрессии производительности;
  • Безопасно использовать постоянное соединение к базе данных.

11
Курсы разработаны в компании «1С-Битрикс»

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