Быстрая оптимизация настроек веб сервера Apache и Nginx. Уменьшение интенсивности логирования. Отключение разрешения имён хостов

Сегодня я расскажу о том, как сделать Apache немного быстрее. Кто-то спросит — «зачем?.. есть же более быстрые решения!»….
Таким товарищам я отвечу что да, есть, что они быстрее, например на одной жестяной банке я использую связку Apache+Nginx (даже писал об этом), можно использовать Nginx с модулем FastCGI.. И об этом я напишу, не в этой статье, но напишу..

Но сейчас речь пойдет о том, как сделать Apache немного быстрее, адекватнее и безопаснее. Картинка, тег «more» и пошла статья…

Модули в Apache

Первое, самое основное, что-то типа «спасибо-кэп» — Apache нужно запускать с необходимыми модулями, чтобы уменьшить потребление памяти.

Для их отключения можно воспользоваться командами a2dismod <имя_модуля> а потом перезапустить конфигурацию сервера. Если вы отключите что-то не то, то включить модуль можно командой a2enmod <имя_модуля>. Опять же смотрите что отключайте, иначе какие-то функции ваших проектов могут перестать работать.

Кстати, как правило, кроме этих перечисленных модулей вам больше ничего не нужно:

Mod_alias mod_authz_host mod_deflate mod_dir mod_expires mod_headers mod_mime mod_rewrite mod_log_config mod_autoindex mod_negotiation mod_setenvif

Подходящий MPM

В apache каждый запрос обрабатывается в своем процессе или потоке. При компиляции apache позволяет выбирать один из нескольким MPM (Multi-processing module), которые отвечают за прослушивание портов, прием запросов и раздачу этих запросов дочерним процессам или потокам, в которых эти запросы будут обработаны.

Если безопасность важна — выбирайте peruser MPM. Если важна производительность, то выбирайте prework или worker.

  • Worker — поточный MPM, т.е. в нем каждый запрос обслуживается в отдельном потоке одного из дочерних процессов. Потоки — более легкие для ОС объекты, чем процессы, они более эффективно используют память и переключения контекста для них происходят быстрее. Однако, из-за того что каждый поток имеет доступ ко всей памяти процесса, worker mpm более подвержен сбоям: сбой одного потока может повлечь падение всего процесса, в котором находился этот поток (именно поэтому worker mpm запускает несколько дочерних процессов с несколькими потоками в каждом).
  • Perfork — mpm использует несколько дочерних процессов, каждый дочерний процесс обрабатывает одно подключение. Из-за того что процесс — более тяжелая структура, он использует немного больше ресурсов, зато он менее подвержен сбоям — обработка каждого отдельного запроса не зависит от других процессов.

По мне так Worker — самый оптимальный вариант.

Чтобы узнать какой у вас MPM сейчас работает, есть два способа, первый — получить список модулей с помощью apachectrl (для CentOS):

Apachectl -t -D DUMP_MODULES

Это пример для Debian систем:

Apache2ctl -t -D DUMP_MODULES

Второй способ посмотреть подробную информацию о версии Apache. На CentOS:

Для смены MPM на некоторых ОС потребуется перекомпиляция apache, или установка соответствующего пакета apache (apache2-mpm-event, apache2-mpm-prefork, apache2-mpm-itk, apache2-mpm-worker).

В CentOS системах достаточно будет просто раскомментировать в файле /etc/sysconfig/httpd строку

HTTPD=/usr/sbin/httpd.worker

и перезагрузить apache…

DNS запросы

HostnameLookups — это директива, которая включает reverse DNS запросы, в результате в логи, вместо IP адресов будут попадать dns хосты. Эта директива будет тормозить запрос, пока не последует ответа от DNS сервера.

Поэтому в конфиг файле эта директива должна быть отключена: HostnameLookups Off

Если вам так необходимы dns адреса — пользуйтесь logresolve.

Так же убедитесь в том, что в директивах Allow from и Deny from использовались IP адреса, так как apache будет делать два запроса, чтобы убедиться в том что клиент — тот за кого себя выдает.

Content Negotiation

Если вам не Требуется, чтобы Apache
автоматически распознавал язык каждого посетителя и выдавал страницы на со ответствующем языке, то отключите данный модуль: a2dismod negotiation

FollowSymLinks и SymLinksIfOwnerMatch

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

Если опция SymLinksIfOwnerMatch включена для какой-то директории, то сервер будет следовать по символическим ссылкам только в случае совпадения владельца этой директории и файла/директории куда ссылается эта ссылка. Это говорит о том что SymLinksIfOwnerMatch делает больше запросов, поэтому отключайте ее.

AllowOverride

Если директива AllowOverride не установлена в ‘None’, Apache будет искать файл.htaccess в каждой директории, которую он посещает. Вот пример:

DocumentRoot /var/www/html AllowOverride all

Если будет запрошен файл /index.php, Apache будет пытаться открыть файлы /.htaccess, /var/.htaccess, /var/www/.htaccess, и /var/www/html/.htaccess, что увеличивает время запроса. Поэтому, если вам необходим этот файл только для одной директории, то включайте эту директиву только для нее:

DocumentRoot /var/www/html AllowOverride None AllowOverride all

MaxClients

Данная директива устанавливает максимальное количество запросов, которое будет обслуживать Apache. MaxCliets не должно быть много. Значение выставляется большим, чтобы обрабатывать одновременно много запросов, а меньшим для снижения потребления памяти!

MinSpareServers, MaxSpareServers, и StartServers

Директивы MaxSpareServers и MinSpareServers устанавливают как много процессов/потоков должны ожидать в готовности принять запрос (максимум и минимум). Если значение MinSpareServers слишком маленькое и неожиданно приходит много запросов, apache вынужден будет создавать много новых процессов/потоков, что создаст дополнительную нагрузку в этой стрессовой ситуации. С другой стороны, если MaxSpareServers слишком велико, apache будет сильно нагружать систему этими процессами, даже если количество клиентов минимально.

Устанавливайте такие MinSpareServers и MaxSpareServers, чтобы apache не создавал более 4 процессов/потоков в секунду. Если он создаст более 4, в ErrorLog будет помещено сообщение об этом, что будет говорить о том что MinSpareServers слишком мало.

MaxRequestsPerChild

Эта директива устанавливает количество запросов, которое сможет обработать один дочерний процесс, прежде чем он будет завершен. По умолчанию там установлено 0, что может привести к утечке памяти, поэтому установите туда, например, 4096…

Вообще, если вы можете не поднимать Apache , не делайте этого. Задумайтесь, может ли нужные вам задачи выполнять lighttpd или thttpd . Эти веб-серверы могут оказаться весьма кстати в ситуациях, где системных ресурсов на всех не хватает, а работать должно. Ещё раз повторюсь: речь идёт о тех ситуациях, когда функциональности этих продуктов будет достаточно для выполнения поставленных задач (кстати, lighttpd умеет работать с PHP ). В тех ситуациях, где без Apache ну просто никак не обойтись, всё равно обычно можно освободить немало системных ресурсов, перенаправив запросы к статическому контенту (JavaScript, графика) от Apache к легковесному HTTP-серверу. Наибольшей проблемой Apache является его большой аппетит к оперативной памяти. В этой статье я рассмотрю методы, помогающие ускорить работу и снизить объёмы занимаемой им памяти:

  • обработке меньшего числа параллельных запросов;
  • циркуляция процессов;
  • использование не слишком «долгих» KeepAlive;
  • уменьшение таймаута;
  • уменьшение интенсивности логирования;
  • отключение разрешения имён хостов;
  • отключение использования .htaccess .
  • Загрузка меньшего количества модулей

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

    Обработка меньшего числа параллельных запросов

    Чем большему количеству процессов Apache разрешено запускаться одновременно, тем больше одновременных запросов он сможет обработать. Увеличивая это число, вы тем самым увеличиваете и объём памяти, отдаваемой под Apache . Воспользовавшись top, можно увидеть, что каждый процесс Apache занимает совсем немножко памяти, поскольку используются разделяемые библиотеки. В Debian 5 с Apache 2 по умолчанию используется такая конфигурация:

    StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 20 MaxRequestsPerChild 0

    Директива StartServers определяет количество процессов сервера, запускаемых изначально, сразу после его старта. Директивы MinSpareServers и MaxSpareServers определяют минимальное и максимальное количество дочерних «запасных» процессов Apache . Такие процессы находятся в состоянии ожидания входящих запросов и не выгружаются, что даёт возможность ускорить реакцию сервера на новые запросы. Директива MaxClients определяет максимальное количество параллельных запросов, одновременно обрабатываемых сервером. Когда количество одновременных соединений превысит это количество, новые соединения будут поставлены в очередь на обработку. Фактически, директива MaxClients и определяет максимально-допустимое число дочерних процессов Apache ,запущенных одновременно. Директива MaxRequestsPerChild определяет количество запросов, которое должен обработать дочерний процесс Apache , прежде чем завершить своё существование. Если значение этой директивы установлено равным нулю, то процесс не будет «истекать».

    Для своего домашнего сервера, с соответствующими нуждами, я исправил конфигурацию на следующую:

    StartServers 1 MinSpareServers 1 MaxSpareServers 1 MaxClients 5 MaxRequestsPerChild 300

    Конечно же, приведённая выше конфигурация совершенно не годится для использования на высокозагруженных серверах, но для дома, на мой взгляд — самое оно.

    Циркуляция процессов

    Как можно было заметить, я изменил значение директивы MaxRequestsPerChild . Ограничив таким образом время жизни дочерних процессов количеством обработанных запросов, можно избежать случайных утечек памяти, вызванных криво-написанными скриптами.

    Использование не слишком «долгих» KeepAlive

    KeepAlive — это метод поддержки постоянного соединения между клиентом и сервером. Изначально протокол HTTP разрабатывался как не ориентированный на постоянные соединения. То есть, когда веб-страница отправляется клиенту, все её части (картинки, фреймы, JavaScript) передаются с использованием различных, отдельно устанавливаемых соединений. С появлением KeepAlive , у браузеров появилась возможность запрашивать постоянное соединение и, установив его, загружать данные, используя одно установленное соединение. Такой способ даёт неслабый прирост производительности. Однако Apache по умолчанию использует слишком большой таймаут перед закрытием соединения, равный 15-ти секундам. Это значит, что после того, как был отдан весь контент клиенту, запросившему KeepAlive , дочерний процесс ещё 15 секунд будет находиться в ожидании входящих запросов. Многовато, однако. Лучше уменьшить этот таймаут до 2-3 секунд.

    KeepAliveTimeout 2

    Уменьшение таймаута

    Как вариант, можно уменьшить значение директивы TimeOut , которая определяет время ожидания завершения отдельных запросов. По умолчанию её значение равно 300 , быть может, в вашем случае будет иметь смысл это значение уменьшить/увеличить. Я лично пока оставил как есть.

    Уменьшение интенсивности логирования

    На пути к увеличению производительности сервера можно попробовать снизить интенсивность ведения протоколов. Модули, такие как mod_rewrite , могут писать в лог отладочную информацию, и если она вам не нужна — отключайте её вывод.

    Отключение разрешения имён хостов

    На мой взгляд, нет никакой необходимости в том, чтобы выполнять обратное преобразование IP-адресов в имена хостов. Если они уж так сильно вам необходимы при анализе логов, то можно определять их на стадии анализа, а не в процессе работы сервера. За разрешение имён хостов отвечает директива HostnameLookups , которая, вообще-то, по умолчанию и установлена в Off , однако проверьте это, если действительно считаете необходимым отключить преобразование.

    HostnameLookups Off

    Отключение использования.htaccess

    Обработка файлов .htaccess выполняется Apache каждый раз при запросе данных. Мало того, что Apache должен загрузить этот файл, так ещё немало времени и ресурсов уходит на его обработку. Взгляните на ваш веб-сервер и пересмотрите необходимость в использовании файлов .htaccess . Если вам нужны различные настройки для разных каталогов, может быть реально будет их вынести в основной файл конфигурации сервера? А отключить обработку .htaccess можно директивой в конфигурации сервера.


    Apache - популярный веб-сервер в интернет, он обслуживает неограниченное количество серверов и сайтов. Часто возникает необходимость прирастить производительность веб-сервера. Наверное лучший способ это сделать - перейти к схеме frontend+backend, но это может потребовать достаточно грозных конфигураций в приложении (например, у вас наверняка отвалятся всяческие индикаторы прогресса аплоада файлов .
    Другой способ - просто прирастить производительность сервера - поставить более быстрый процессор и больше памяти.
    Да и 1-ое и 2-ое просит много времени и ресурсов, так что на 1-ое время можно испытать ускорить apache способом оптимизации его конфигурации. Есть оптимизации, которые можно применить только при пересборке apache, другие же можно использовать без перекомпиляции сервера.

    Загружайте только нужные модули

    Apache - модульная программа, большая часть функций которой реализуется в модулях. При всем этом эти модули могут быть как вкомпилированы, так и собраны в виде DSO - динамических библиотеках. Большая часть современных дистрибутивов поставляет apache с набором DSO, так что не нужные модули можно просто отключить без перекомпиляции.
    Запускайте apache только с необходимыми модулями, чтобы уменьшить потребление памяти. Если вы решили скомпилировать apache без помощи других, то либо тщательно подходите к выбору списка модулей, которые вы включите, либо компилируйте их как DSO используя apxs в apache1 и apxs2 в apache2.

    Для того чтобы отключить ненужные DSO-модули, достаточно закомментировать лишние строчки LoadModule в httpd.conf. Apache со статически скомпилированными модулями будет потреблять чуть меньше памяти, но для вас придется каждый раз его перекомпилировать для конфигурации списка модулей.

    Выберете подходящий MPM

    В apache каждый запрос обрабатывается в своем процессе или потоке. При компиляции apache позволяет выбирать один из нескольким MPM (Multi-processing module), которые отвечают за прослушивание портов, прием запросов и раздачу этих запросов дочерним процессам или потокам, в каких эти запросы будут обработаны.
    Выбор MPM зависит от нескольких обстоятельств, таких как наличие поддержки потоков в , количества свободной памяти, также требований стабильности и безопасности.
    Если безопасность очень принципна, следует выбрать peruser MPM, пожертвовав производительностью.
    Если принципна непосредственно производительность, то выбор ограничивается 2-мя mpm: prefork и worker.
    Worker - поточный MPM, т.е. в нем каждый запрос обслуживается в отдельном потоке 1-го из дочерних процессов. Потоки - более легкие для объекты, чем процессы, они более отлично употребляют память и переключения контекста для их происходят быстрее. Но, из-за того что каждый поток имеет доступ ко всей памяти процесса, worker mpm более подвержен сбоям: сбой 1-го потока может повлечь падение всего процесса, в каком находился этот поток (именно поэтому worker mpm запускает несколько дочерних процессов с несколькими потоками в каждом).

    Perfork - mpm употребляет несколько дочерних процессов, каждый дочерний процесс обрабатывает одно подключение. Из-за того что процесс - более тяжелая структура, он употребляет малость больше ресурсов, зато он менее подвержен сбоям - обработка каждого отдельного запроса не зависит от других процессов.
    К огорчению, для смены mpm требуется перекомпиляция apache. Тут проявляют свои плюсы source-based дистрибутивы: вы можете просто перекомпилировать apache и все зависимые от него пакеты, не превратив систему в свалку. Бинарные дистрибутивы выходят из этой ситуации по-разному.

    Например в RHEL в apache rpm находится слету две версии apache - с worker и prefork mpm (prefork употребляется по умолчанию). Но worker mpm не поддерживает php. Так что если вы желаете php и worker mpm для вас придется компилировать его без помощи других либо отыскивать посторонние репозитории.

    DNS lookup

    Директива HostnameLookups включает reverse DNS запросы, так что в логи будут попадать dns-хосты клиентов вместо ip-адресов. Разумеется, что это существенно замедляет обработку запроса, т.к. запрос не обрабатывается пока не будет получит ответ от DNS-сервера. Поэтому смотрите чтобы эта директива всегда была выключена (HostnameLookups Off), а если для вас все-таки нужны dns-адреса, вы можете узнать их позже, прогнав лог в утилите logresolve (которая поставляется с apache).
    Не считая того, смотрите чтобы в директивах Allow from и Deny From использовались ip-адреса а не доменные имена. По другому apache будет делать два dns запроса (обратный и прямой) чтобы убедиться что клиент-тот за кого себя выдает.

    Встреча BAFPUG 2011-11-05

    AllowOverride

    Если директива AllowOverride не установлена в ‘None’, apache будет пробовать открыть.htaccess файлы в каждой директории которую он посещает и во всех директориях выше нее. Например:

    DocumentRoot /var/www/html AllowOverride all

    Если будет запрошен /index.html, apache попробует открыть (и интерпретировать) файлы /.htaccess, /var/.htaccess, /var/www/.htaccess, и /var/www/html/.htaccess. Это увеличивает время обработки запроса. Так что, если для вас нужен.htaccess только для одной директории, разрешайте его только для нее:

    DocumentRoot /var/www/html AllowOverride None AllowOverride all

    FollowSymLinks и SymLinksIfOwnerMatch

    Если для директории включена функция FollowSymLinks, сервер будет следовать по символическим ссылкам в этой директории. Если для директории включена функция SymLinksIfOwnerMatch, apache будет следовать по символическим ссылкам только если владелец файла или директории, на которую указывает эта ссылка совпадает с владельцем обозначенной директории. Так что при включенной функции SymLinksIfOwnerMatch apache делает больше системных запросов.
    Не считая того, дополнительные системные запросы требуются когда FollowSymlinks НЕ УСТАНОВЛЕН. Т.о. более наилучшая ситуация для производительности - когда функция FollowSymlinks включена.

    Content Negotiatio

    Пытайтесь избегать content negotiaion.

    MaxClients

    Директива MaxClients устанавливает наибольшее количество параллельных запросов, которые будет поддерживать сервер. Apache не будет порождать больше процессов/потоков чем MaxClients.

    Значение MaxClient не долно быть очень маленьким (по другому много клиентов останутся необслуженными), ну и не стоит устанавливать очень неограниченное количество - лучше не обслужить часть клиентов чем исчерпать все ресурсы, залезть в своп и умереть под нагрузкой. Хорошим может быть значение MaxClients = количество памяти выделенное под веб-сервер / больший размер порожденного процесса или потока. Для статических файлов apache употребляет около 2-3 Мб на процесс, для динамики (php, cgi) - зависит от скрипта, но обычно около 16-32 Мб.

    Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog.

    MinSpareServers, MaxSpareServers, и StartServers

    Т.к. создание потока, и в особенности процесса - дорогая операция, apache делает их заранее. Директивы MaxSpareServers и MinSpareServers устанавливают как много процессов/потоков должны ожидать в готовности принять запрос (максимум и минимум).

    Если значение MinSpareServers очень наимельчайшее и в один момент приходит много запросов, apache должен будет создавать много новых процессов/потоков, что создаст дополнительную нагрузку в этой стрессовой ситуации. С другой стороны, если MaxSpareServers очень велико, apache будет очень нагружать систему этими процессами, даже если количество клиентов не много.
    Постарайтесь установить такие MinSpareServers и MaxSpareServers, чтобы apache не создавал более Четыре процессов/потоков в секунду. Если он создаст более 4, в ErrorLog будет помещено сообщение об этом. Это - сигнал того что MinSpareServers очень не довольно.

    MaxRequestsPerChild

    Директива MaxRequestsPerChild устанавливает сколько запросов может обработать один дочерний процесс/поток до того как он будет завершен. По умолчанию значение этой директивы установлено в 0, что означает что однажды изготовленный процесс/поток не будет завершен никогда (ну не считая случаев остановки сервера или краха этого процесса/потока).

    Рекомендую установить MaxRequestsPerChild равное какому-нибудь достаточно большому числу (несколько тысяч). Это не создаст излишней нагрузки, связаной с тем что apache будет должен создавать новые дочерние процессы, в то же время это поможет избавиться от заморочек с утечкой памяти в дочерних процессах (что очень может быть например если вы используете нестабильную версию php).

    KeepAlive и KeepAliveTimeout

    KeepAlive позволяет делать несколько запросов в одном TCP-подключении. Это в особенности полезно для html-страниц с множеством изображений.

    Если KeepAlive установлен в Off, то для самой страницы и для каждого изображения будет создано отдельное подключение (которое нужно будет обработать master-процессу), что плохо и для сервера и для клиента. Так что для похожих случаев рекомендуется устанавливать KeepAlive в On.

    Для других применений (например для download-сервера) KeepAlive может быть бесполезен и даже вреден, т.к. при включенном KeepAlive сервер закрывает соединение не слету, а ждет KeepAliveTimeout секунд нового запроса. Для того чтобы процессы не висели очень продолжительно в бесполезном ожидании, устанавливайте KeepAliveTimeout достаточно малым, около 5-10 секунд обычно достаточно.

    Сжатие

    HTTP-сжатие было определено в образце HTTP/1.1, и сейчас все современные клиентские программы и практически все сервера его поддерживают. Сервер может отдавать ответ в gzip или deflate, а клиентская программа незаметно для пользователя разжимает данные. Это уменьшает количество передаваемого трафика (до 75%), но естественно наращивает внедрение процессора.
    Но если ваш сервер посещает много клиентов с медленным подключение, сжатие может снизить нагрузку с вашего сервера из-за того что сервер сможет быстрее передать сжатый ответ и вызволить ресурсы, занятые дочерним процессом. В особенности очень этот эффект может быть заметен если у вас быстрый процессор, но не довольно памяти.
    Кеширование меняется директивами модуля mod_deflate. Имейте в виду, что не следует устанавливать степень сжатия gzip более 4-5 - это потребует существенно большего времени CPU, а эффект будет достаточно невелик. Ну и разумеется не нужно пробовать сжать изображения в jpg, gif и png, музыку, видео файлы и все другие бинарные файлы, которые уже и так отлично сжаты.

    Кеширование на стороне клиента

    Не забывайте устанавливать Expires заглавия на статические файлы (см. модуль mod_expires). Если файл не изменяется, то его всегда следует испытать закешировать на клиенте. Тогда у клиента будут быстрее загружаться страницы, а сервер освободится от лишних запросов.

    Отменная статья, перепечатал с сайта Highload Web.

    Читаем еще:

    • Скрипт для оптимизация производительности Mysql
    • AWStats анализатор логов для статистики
    • FTP сервер на базе vsftpd и MySQL в Debian (Ubuntu)
    • Внедрение mod_macro для конфигурации виртуальных хостов Apache
    • Проверка Linux сервер на предмет взлома

    Как увеличить производительность сервера на ОС CentOS. Часть третья: Быстрая оптимизация настроек веб сервера.

    В данной статье мы расскажем, как увеличить производительность сервера (выделенного или виртуального) на примере ОС CentOS с помощью быстрой оптимизации настроек веб сервера Nginx и Apache (httpd).

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

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

    Оптимизация настроек веб сервера Apache (httpd).

    Конфигурационный файл веб сервера Apache находится по следующему пути:

    /etc/httpd/conf/httpd.conf

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

    StartServers 5
    MinSpareServers 5
    MaxSpareServers 20
    MaxClients 256
    MaxRequestsPerChild 0

    Maxclients необходимо высчитать, опираясь на количество оперативной памяти, установленной на Вашем сервере. Также следует учесть количество памяти, используемой одним процессом веб сервера. Узнать количество потребляемой памяти одним процессом веб сервера можете с помощью утилиты top , инструкция по использованию в нашей базе знаний.

    Далее отсчитайте 2\3 от общего количества оперативной памяти Вашего сервера и разделите на количество памяти, потребляемой одним процессом веб сервера. Полученное число и будет оптимальное значение MaxClients.

    Например, имеем сервер с 8 Гб оперативной памяти. 2\3 от 8 будет 5.3 Гб. Один процесс веб сервера обычно потребляет около 40 Мб памяти. Считаем 5300мб \ 40мб, получаем 132. Лучше округлять в меньшую сторону. Оставляем значение 130, в итоге блок конфигурационного файла должен иметь такой вид:

    StartServers 5
    MinSpareServers 5
    MaxSpareServers 20
    MaxClients 130
    MaxRequestsPerChild 0

    Также включите KeepAlive, для этого найдите в конфигурационном файле строку:

    KeepAlive Off

    Измените Off на On:

    KeepAlive On

    После внесения изменений перезагрузите веб сервер командой:

    /etc/init.d/httpd restart

    Service httpd restart

    Оптимизация настроек веб сервера Nginx.

    Конфигурационный файл веб сервера Nginx находится по следующему пути:

    /etc/nginx/nginx.conf

    В нем необходимо настроить количество процессов Nginx. Обычно данная настройка зависит от количества ядер процессора, которые доступны для Вашего сервера. За это отвечает директива worker_processes, в конфигурационном файле это выглядит так:

    User apache;

    pid /var/run/nginx.pid;
    worker_processes 4;

    Как видите, количество процессов Nginx настроено для 4х ядер процессора. Если Ваш сервер обрабатывает очень много соединений, можете увеличить это значение на половину, если установить большее значение - это будет в убыток производительности.

    Worker_rlimit_nofile 65536;
    events {
    use epoll;
    worker_connections 65536;
    }

    Это увеличит ограничения для Nginx по количеству обрабатываемых файлов и улучшит его работу. Если в Вашем конфигурационном файле уже прописаны worker_rlimit_nofile или worker_connections - удалите их, оставьте только блок, как на образце.

    В итоге начало конф-го файла должно выглядеть таким образом:

    User apache;
    error_log /var/log/nginx/error.log warn;
    pid /var/run/nginx.pid;
    worker_processes 4;
    worker_rlimit_nofile 80000;
    events {
    use epoll;
    worker_connections 65536;
    }
    http {

    default_type application/octet-stream;
    log_format main "$remote_addr - $remote_user [$time_local] "$request" "
    "$status $body_bytes_sent "$http_referer" "
    ""$http_user_agent" "$http_x_forwarded_for"";
    access_log /var/log/nginx/access.log main;

    Access_log off;

    (Просмотреть нагрузку на диск можете с помощью утилиты top)

    Также Вы можете включить в Nginx Gzip сжатие. Это может ускорить загрузку Вашего сайта, а также это выгодно в seo продвижении, однако рекомендуем проверить скорость загрузки после включения Gzip, т.к. на сайты с большим количеством запросов это может повлиять негативно. Чтобы включить Gzip сжатие в Nginx , нужно добавить в секцию http { такой код:

    Gzip on;
    gzip_comp_level 5;
    gzip_min_length 10240;


    gzip_disable "msie6";

    Добавьте этот код на следующей строке после http { Чтобы это выглядело так:

    Use epoll;
    worker_connections 65536;
    }
    http {
    gzip on;
    gzip_comp_level 5;
    gzip_min_length 10240;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
    gzip_disable "msie6";
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    Если ниже в коде встречаются настройки Gzip - удалите их.

    После завершения настройки, выполните перезагрузку Nginx командой:

    /etc/init.d/nginx restart

    Service nginx restart

    С предыдущими материалами по оптимизации настроек сервера можете ознакомиться по ссылкам:

    Если у Вас возникнут трудности в настройке и администрировании сервера - всегда можете обратиться в нашу службу технической поддержки.

    Apache — самый популярный Web сервер. Настройка некоторых параметров (тюнинг) может дать существенный прирост в скорости его работы.

    Конфигурация

    Настройка Apache проводится в конфигурационном файле. Его можно найти:

    Debian
    /etc/apache2/apache2.conf
    Freebsd
    /usr/local/etc/apache22/httpd.conf

    Модули

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

    Обычно Вам не нужно ничего, кроме таких модули:

    Mod_alias mod_authz_host mod_deflate mod_dir mod_expires mod_headers mod_mime mod_rewrite mod_log_config mod_autoindex mod_negotiation mod_setenvif

    MPM

    MPM позволяет выбрать метод обработки параллельных запросов. Оптимальный вариантWorker — поточный MPM. В нем каждый запрос обслуживается в отдельном потоке одного из дочерних процессов. Потоки — более легкие для ОС объекты, чем процессы. Следовательно, в этом случае производительность повышается.

    Для включения Worker MPM, нужно открыть файл nano /etc/sysconfig/httpd

    и убрать комментарий со строки HTTPD=/usr/sbin/httpd.worker

    Перезапустим Apache /etc/init.d/apache2 restart

    AllowOverride и.htaccess

    Директива AllowOverride включайте использование файла.htaccess. В этом случае при каждом запросе Apache будет искать этот файл в запрашиваемых директориях. Перемещайте всю конфигурацию в файлы виртуальных хостов (папка /etc/apache2/sites-enabled/ для Debian) и отключите использование htaccess: AllowOverride None

    MaxClients


    Директива MaxClients устанавливает максимальное количество параллельных запросов, которые будет обрабатывать сервер. Эту настройку нужно адаптировать с течением времени, работайте в пределах значений в 128...4096: MaxClients 256

    Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog.

    MinSpareServers, MaxSpareServers, и StartServers

    Эти директивы позволяют заранее иметь в памяти созданные процессы, чтобы не приходилось этого делать во время получения запроса. Они устанавливаются только для prefork mpm .

    StartServers 3

    # При запуска Apache будет создавать 3 процесса

    MinSpareServers 3

    # Apache не будет убивать свободные процессы, если их остается менее трех

    MaxSpareServers 5

    # Максимум 5 свободных процессов, остальные будут уничтожаться

    MaxRequestsPerChild

    Директива MaxRequestsPerChild устанавливает сколько запросов может обработать один дочерний процесс/поток прежде чем он будет завершен. По умолчанию значение этой директивы установлено в 0, что означает что однажды созданный процесс/поток не будет завершен никогда. Этот параметр позволяет избавиться от проблем с утечкой памяти, поэтому лучше установить его:

    MaxRequestsPerChild 4096

    # После 4096 обработанных запросов процесс будет перезапущен

    KeepAlive

    KeepAlive запросы позволяют устанавливать постоянные соединения между клиентом и сервером. Это экономит ресурсы на отсутствии повторной установки соединений. Обязательно включайте эту опцию.

    KeepAlive On KeepAliveTimeout 30

    # Включаем KeepAlive и устанавливаем время ожидания перед закрытием соединения в 30 секунд

    Бывают случаи, когда пользователь отправляет только один запрос. Например, download-сервер. Тогда KeepAlive может быть бесполезен и даже вреден, т.к. при включенном KeepAlive сервер закрывает соединение не сразу, а ждет какое-то время (KeepAliveTimeout).

    Сжатие


    Все современные браузеры поддерживают сжатие. Включение gzip существенно уменьшит размер трафика. Это нужно делать всегда.

    AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript

    Проверьте, что сжатие заработало с помощью Online Gzip checker .

    DNS


    Выключайте лишние запросы к DNS в Apache: HostnameLookups Off

    # Так Apache будет записывать в лог IP адрес клиента вместо его хоста.

    Всегда используйте IP адрес в директивах Allow From и Deny From, а не доменные имена. Allow From 1.1.1.1 Deny From 2.2.2.2

    Самое важное

    Самым большим эффектом на посетителей окажет включение сжатия gzip . Часто это экономит около 70% трафика.

    Похожие публикации