Статьи

Нужна ли вашему веб-серверу Apache любовь?

Если вы когда-либо настраивали веб-сервер Apache, вы воочию знаете, что настройка серверов для оптимальной производительности — это сложный процесс, который зависит от многочисленных параметров. Итак, как вы узнаете, нуждается ли ваш сервер в тонкой настройке? В Интернете можно найти множество отличных статей «10 лучших советов по настройке» и руководства «Как сделать», которые помогут вам решить такие проблемы с производительностью. Я расскажу вам основы здесь.

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

Отслеживайте нагрузку на сервер

Если вы хотите выполнить серьезную настройку производительности, вам нужно измерить основные показатели производительности в реальных сценариях нагрузки. Это означает, что вы должны убедиться, что ваш веб-сервер получает достаточно запросов во время тестирования, чтобы вы могли измерить влияние запросов на основные показатели, такие как процессор, память и сетевой трафик.
В этой статье мы настроили HTTP-сервер Apache для использования с базовой нагрузкой 80-100 запросов в секунду (в среднем 87,6 запросов в секунду). Этот параметр вызывает достаточную загрузку процессора, памяти и сети для целей тестирования.


Масштабирование с рабочими

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

Параметры Apache по умолчанию для потоков:

StartServers           5
MinSpareServers        5
MaxSpareServers        10
MaxRequestWorkers      150
MaxConnectionsPerChild 0

В MaxRequestWorkersпараметр диктует максимальное число рабочих (процессов или потоков) , который может обрабатывать запросы Apache одновременно. Обратитесь к документации Apache для получения дополнительной информации об этой директиве.

Сколько рабочих вам нужно?

В нашем примере Apache создал 49 рабочих (только 27 занятых, 22 неработающих).


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


Тем не менее, конфигурация по умолчанию позволяет 150 рабочих (примерно в три раза больше рабочих, чем в нашем примере было создано Apache). Если вы посчитаете, вы получите оценку насыщения процессора примерно на 90% в результате запросов от 150 работников. Это слишком высоко, поэтому, чтобы быть в безопасности, вы должны уменьшить MaxRequestWorkersнастройку примерно до 120.

Динамические и статические запросы

Фактическое влияние на процессор может быть выше в зависимости от характера запросов. Являются ли запросы динамическими, запросы с интенсивным использованием ЦП / ОЗУ или статическими запросами с интенсивным диском / кэшированием?


Динамические и статические запросы для приложения под базовой нагрузкой

Служба, которая потребляет больше всего ресурсов ЦП, работает на порте 8079. Она имеет 335 динамических запросов в минуту и ​​2790 статических запросов в минуту. Что касается ЦП, наибольший потенциал для оптимизации лежит в алгоритмах, которые обслуживают динамические запросы. Я рассмотрю эту тему в следующем посте в блоге, поскольку это выходит за рамки конфигурации Apache и затрагивает настройку производительности на уровне кода.

Для оптимизации производительности статических запросов Apache предоставляет модули кеширования.

Ресурсы кеширования для запросов: экскурс

Существуют различные модули, предназначенные для кэширования часто запрашиваемого содержимого , чтобы ускорить последующие запросы. Это особенно полезно для ускорения выполнения статических запросов. Здесь я приведу только некоторые основные сведения по этой теме — настройка модулей кэширования для Apache занимает более 7 минут.

  • HTTP-кэширование использует функции протокола HTTP, чтобы минимизировать сетевой трафик между веб-сервером и браузером и тем самым снизить нагрузку на стороне сервера. Кешируемость контента (т. Е. Запрошенных ресурсов) управляется mod_cacheмодулем, который создает кэш с тремя состояниями (т. Е. Свежий, устаревший и несуществующий) для кешируемых пар запросов / ответов. Используйте mod_expiresмодуль для точной настройки времени, в течение которого ресурс должен считаться свежим. Это позволяет вам использовать локальный кеш браузера, используя max-ageдирективу или Expiresзаголовок для кеширования в HTTP .
  • Кэширование значения ключа предоставляет кеш объекта, который часто используется для кэширования сеансов SSL и деталей аутентификации. Кэш объектов может быть доступен для всего сервера или центра данных.
  • Кэширование файлов позволяет предварительно загружать множество часто используемых статических файлов в память при запуске сервера и не позволяет серверу загружать одни и те же файлы с диска при каждом запросе. В средах с медленными файловыми системами кэширование файлов позволяет повысить производительность. Модуль mod_file_cacheвсе еще является экспериментальным и требует перезагрузки сервера каждый раз, когда вы хотите обновить статический файл. Это серьезный недостаток, поэтому используйте этот модуль с осторожностью.

Просмотр включенных модулей

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


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