Если вы когда-либо настраивали веб-сервер 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
Модуль , который вы должны внимательно посмотреть. Излишне сложные правила регулярных выражений могут занять довольно много времени для оценки. Также убедитесь, что все ваши правила переписывания действительно необходимы и используются.