5 советов по повышению производительности веб-сервера Apache

Рубрики:

Apache

Метки:

, ,

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

Кроме того, Apache продолжает демонстрировать наибольший рост среди ведущих веб-серверов, за которым следуют Nginx и IIS. Таким образом, если вы являетесь системным администратором, отвечающим за управление установками Apache, вам необходимо знать, как обеспечить максимальную производительность вашего веб-сервера в соответствии с вашими потребностями (или потребностями вашего клиента).

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

Тем не менее, имейте в виду, что Apache не был разработан с целью установки тестовых записей — но, несмотря на это, он по-прежнему способен обеспечить высокую производительность практически в любом случае использования, о котором вы только можете подумать.

 

СОВЕТ № 1: Всегда обновляйте Apache до последней версии

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

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

В любом случае вы можете проверить установленную на данный момент версию следующим образом:

 

Check-Apache-Version

 

Как правило, придерживайтесь метода обновления, предоставляемого менеджером пакетов выбранного вами дистрибутива (yum update httpd или aptitude safe-upgrade apache2, for CentOS or Debian, соответственно), если нет другого пути. Вы можете прочитать последние заметки о выпуске в разделе документации Apache на веб-сайте проекта HTTP-сервера Apache.

 

СОВЕТ № 2: Если вы используете ядро старше 2.4, рассмотрите возможность обновления

Зачем? В версиях ядра 2.4 и выше системный вызов ядра sendfile включен по умолчанию. Это, в свою очередь, облегчает высокопроизводительную сетевую передачу файлов (что желательно в контексте обмена данными между веб-сервером и клиентом) и позволяет Apache доставлять статический контент быстрее и с меньшим использованием ЦП, выполняя одновременные операции чтения и отправки.

Вы можете просмотреть ваше установленное ядро с помощью:

 

 

и сравните его с последним стабильным ядром на www.kernel.org.

 

Check-Linux-Kernel-Version

 

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

 

СОВЕТ № 3: Выберите модуль мультиобработки (MPM), который лучше всего подходит для вашего случая

На практике MPM расширяют модульные функциональные возможности Apache, позволяя вам решать, как настроить веб-сервер для привязки к сетевым портам на машине, принимать запросы от клиентов и использовать дочерние процессы (и потоки, альтернативно) для обработки таких запросов.

Начиная с версии 2.4, Apache предлагает на выбор три разных MPM в зависимости от ваших потребностей:

  • Prefork MPM использует несколько дочерних процессов без потоков. Каждый процесс обрабатывает одно соединение за раз без создания отдельных потоков для каждого. Не вдаваясь в подробности, мы можем сказать, что вы захотите использовать этот MPM только при отладке приложения, которое использует, или если вашему приложению нужно иметь дело с не поточно-безопасными модулями, такими как mod_php.
  • Worker MPM использует несколько потоков на дочерние процессы, где каждый поток обрабатывает одно соединение за раз. Это хороший выбор для серверов с большим трафиком, поскольку он позволяет обрабатывать больше одновременных соединений с меньшим объемом оперативной памяти, чем в предыдущем случае.
  • Наконец, event MPM является MPM по умолчанию в большинстве установок Apache для версий 2.4 и выше. Он похож на Worker MPM в том, что он также создает несколько потоков для каждого дочернего процесса, но с преимуществом: он заставляет KeepAlive или незанятые соединения (пока они остаются в этом состоянии) обрабатываться одним потоком, освобождая память, которая может выделяться другим потокам. Этот MPM не подходит для использования с не поточно-ориентированными модулями, такими как mod_php, для которого вместо этого должна использоваться замена такого PHP-FPM.

Чтобы проверить MPM, используемый вашей установкой Apache, вы можете сделать:

 

Изображение ниже показывает, что этот конкретный веб-сервер использует prefork MPM.

 

Check-Apache-MPM

 

Чтобы изменить это, вам нужно будет отредактировать:

 

 

Где <mpm> может быть mpm_event, mpm_worker или mpm_prefork и раскомментируйте строку, которая загружает нужный модуль следующим образом:

 

 

Примечание. Чтобы событие MPM работало в Debian, вам может потребоваться установить пакет libapache2-mod-fastcgi из платных репозиториев.

Кроме того, для CentOS вам понадобится php-fpm (вместе с fcgi и mod_fcgid), тогда как в Debian он называется php5-fpm (вместе с apache2-mpm-event).

И последнее, но не менее важное: перезапустите веб-сервер и недавно установленную службу php-fpm (или php5-fpm):

 

На RedHat/CentOS

 

 

В Debian / Ubuntu

 

 

Хотя вы можете настроить Apache на использование определенного MPM, эта конфигурация может быть переопределена для каждого виртуального хоста таким же образом, как указано ранее.

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

Наконец, обратите внимание, что независимо от выбранного вами дистрибутива, php-fpm зависит от реализации FastCGI, поэтому я рекомендовал установку дополнительных пакетов ранее. Для получения более подробной информации и примеров о php-fpm и о том, как он может вместе с событием MPM повысить производительность Apache, вам следует обратиться к официальной документации.

Вот что я вижу после изменения MPM по умолчанию с prefork на событие в том же окне, что и на предыдущем изображении:

 

Choose-Apache-MPM-Module

 

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

Например:

 

 

Причина, по которой я это поднимаю этот впрос, заключается в том, что недавно я столкнулся с проблемой, когда настройки конфигурации firewalld по умолчанию в облачном VPS не позволяли php-fpm и Apache обрабатывать php-файлы.

В качестве базового теста (я уверен, что вы можете подумать о более сложных или стрессовых), я создам файл php, который проверяет наличие другого файла с именем test.php в том же каталоге двух серверов CentOS 7 с одинаковыми характеристиками оборудования и загружу, но с другим MPM. Один из них будет использовать event, а другой — prefork:

 

Compare-Apache-Event-and-Prefork-Module

 

Это код php, который я сохранил в файле с именем checkiffileexists.php:

 

 

Затем мы запустим инструмент тестирования веб-сервера Apache (ab) с 200 одновременными запросами до 2000 запросов:

 

 

Давайте запустим тест и сравним результаты. Обратите внимание на статистику производительности:

 

Apache-Performance-Load-Testing

 

Как вы можете видеть, производительность сервера значительно превосходит его аналог prefork во всех аспектах этого теста.

 

СОВЕТ №4. Разумно распределяйте оперативную память для Apache

Возможно, самый важный аппаратный элемент, который необходимо принять во внимание — это объем ОЗУ, выделенный для каждого процесса Apache. Хотя вы не можете контролировать это напрямую, вы можете ограничить количество дочерних процессов с помощью директивы MaxRequestWorkers (ранее известной как MaxClients в Apache 2.2), которая налагает ограничения на использование ОЗУ Apache. Опять же, вы можете установить это значение для каждого хоста или виртуального хоста.

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

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

Вы можете поместить этот блок в /etc/httpd/conf/httpd.conf или /etc/apache2/apache2.conf, в зависимости от того, используете ли вы CentOS или Debian.

Обратите внимание, что тот же принцип применяется ко всем MPM — я использую событие здесь, чтобы продолжить концепцию, изложенную в предыдущем совете:

 

 

В любом случае настоятельно рекомендуется обратиться к документации Apache 2.4, чтобы узнать, какие директивы разрешены для выбранного вами MPM.

 

СОВЕТ №5. Знайте свои приложения

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

Вы можете перечислить загруженные в данный момент модули с помощью:

 

 

Чтобы выгрузить/отключить модули в CentOS, вам необходимо закомментировать строку, начинающуюся с LoadModule (либо в основном файле конфигурации, либо во вспомогательном файле внутри /etc/httpd/conf.modules.d.).

С другой стороны, Debian предоставляет инструмент под названием a2dismod для отключения модулей и используется следующим образом:

 

 

Чтобы включить его обратно:

 

 

В любом случае, не забудьте перезапустить Apache, чтобы изменения вступили в силу.

 

Спасибо за уделенное время на прочтение статьи с 5 советами по повышению производительности веб-сервера Apache!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасности,  полный курс по кибербезопасностикурсы DevNet (программируемые сети) от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

Apache

Метки:

, ,

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню