Оптимизация Apache. Сжимаем данные и подключаем http2. Оптимизация apache 2


Тюнинг сервера Apache

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 MinSpareServers 3 MaxSpareServers 5

MaxRequestsPerChild

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

MaxRequestsPerChild 4096

KeepAlive

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

KeepAlive On KeepAliveTimeout 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

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

Allow From 1.1.1.1 Deny From 2.2.2.2

Самое важное

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

ruhighload.com

Зеленое Мышко: Оптимизация производительности Apache

Введение

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

Другой способ - просто увеличить производительность сервера - поставить более быстрый процессор и больше памяти.

Однако и первое и второе требует много времени и ресурсов, так что на первое время можно попробовать ускорить 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, пожертвовав производительностью.

Если важна именно производительность, то выбор ограничивается двумя mpm: prefork и worker.

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

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

К сожалению, для смены mpm требуется перекомпиляция apache. Тут проявляют свои достоинства source-based дистрибутивы: вы можете легко перекомпилировать apache и все зависимые от него пакеты, не превратив систему в свалку. Бинарные дистрибутивы выходят из этой ситуации по-разному. Например в RHEL в apache rpm находится сразу две версии apache - с worker и prefork mpm (prefork используется по умолчанию). Однако worker mpm не поддерживает php. Так что если вы хотите php и worker mpm вам придется компилировать его самостоятельно либо искать сторонние репозитории.

DNS запросы

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

Кроме того, следите чтобы в директивах Allow from и Deny From использовались ip-адреса а не доменные имена. Иначе apache будет делать два dns запроса (обратный и прямой) чтобы убедиться что клиент-тот за кого себя выдает.

AllowOverride

Если директива AllowOverride не установлена в 'None', apache будет пытаться открыть .htaccess файлы в каждой директории которую он посещает и во всех директориях выше нее. Например:DocumentRoot /var/www/html <Directory /var/www/html/> AllowOverride all </Directory> Если будет запрошен /index.html, apache попытается открыть (и интерпретировать) файлы /.htaccess, /var/.htaccess, /var/www/.htaccess, и /var/www/html/.htaccess. Это увеличивает время обработки запроса. Так что, если вам нужен .htaccess только для одной директории, разрешайте его только для нее:DocumentRoot /var/www/html <Directory /> AllowOverride None </Directory> <Directory /var/www/html/> AllowOverride all </Directory>

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 Мб.

Вы можете прикинуть примерный размер посмотрев на колонку rss в выводе `ps -ylC httpd --sort:rss`

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

MinSpareServers, MaxSpareServers, и StartServers

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

Постарайтесь установить такие MinSpareServers и MaxSpareServers, чтобы apache не создавал более 4 процессов/потоков в секунду. Если он создаст более 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). Если файл не изменяется, то его всегда следует попробовать закешировать на клиенте. Тогда у клиента будут быстрее загружаться страницы, а сервер освободится от лишних запросов.

Оригинал: "Configuring Apache for Maximum Performance". Vishnu Ram V: http://linuxgazette.net/123/vishnu.html

blog-ru.greenmice.info

Оптимизация Apache. Сжимаем данные и подключаем http2

Оптимизация Apache крайне важна для успешного позиционирования сайта поисковыми системами. Например, Google говорит, что сайт должен быть быстрым, безопасным и весьма желательно, чтобы он поддерживал новый протокол http2. В нескольких следующих статьях рассмотрим, как это сделать. Описаны различные способы оптимизации и даны пошаговые инструкции с пояснениями.

1. Оптимизация Apache. Делаем сайт безопасным.

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

У нас должен быть установленный http сервер Apache, весьма желательно 2.4, обязательно с модулем mod_ssl, который обеспечивает шифрование передаваемых данных. Кроме того, должен быть установлен сертификат сервера (сайта), которому браузеры пользователя будут доверять. То есть, не самоподписанный. Что такое цифровой сертификат см. “Цифровые сертификаты. Определения и пояснения“, “Как создать службу сертификатов. Подготовка” и “Как создать службу сертификатов. Пошаговая инструкция“.

Необходимо знать, где находятся директивы настройки mod_ssl. Обычно это файл /etc/httpd/conf.d/ssl.conf. Или они могут быть включены в основной конфигурационный файл Apache /etc/httpd/conf/httpd.conf.

Оптимизация Apache начинается с безопасности данных. Есть несколько сервисов в интернете, которые могут протестировать сайт с точки зрения безопасности и показать проблемы с его настройкой. Я пользуюсь последнее время Qualys SSL labs. Вводим в соответствующее поле URL сайта и ждем несколько минут результата. Отчет состоит из нескольких частей. Нас интересуют все обнаруженные недостатки и проблемы.

Рис. 1. Протоколы

В разделе протоколов отчета (Рис. 1.) видим, что наш сайт может использовать протокол SSL v3, который считается небезопасным. Его использование надо запретить. Для этого необходимо отредактировать конфигурационные директивы модуля mod_ssl, который отвечает за безопасность передачи данных и шифрование.

Рис. 2. Доступные алгоритмы шифрования

Кроме того, могут использоваться несколько алгоритмов шифрования, которые считаются небезопасными (рис. 2.) Необходимо запретить их использование. Более того, поскольку мы планируем использовать протокол http2, для него имеется его собственный “черный список алгоритмов шифрования“. Его мы учтем то же.

Оптимизация Apache. Редактируем настройки mod_ssl

В результате проведенных манипуляций http сервер Apache будет использовать только протоколы и алгоритмы шифрования, которые считаются безопасными. Изменения необходимо внести в основной конфигурационный файл mod_ssl (обычно  /etc/httpd/conf.d/ssl.conf или /chroot/httpd/etc/httpd/conf.d/ssl.conf) и во все конфигурационные файлы виртуальных серверов (https://), если такие есть.

Находим во всех файлах директивы  SSLProtocol и SSLCipherSuite. После редактирования они должны выглядеть следующим образом:

SSLProtocol All -SSLv2 -SSLv3 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK

Вторая строчка достаточно длинная.

Как только внесли все изменения, перезапускаем Apache и проверяем полученный результат на Qualys SSL labs.

Рис. 3. Результат правильной настройки mod_ssl

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

Рис. 4. Доступные протоколы и алгоритмы шифрования

Цена произведенных улучшений – с сайтом не смогут работать несколько ну очень старых броузеров, которые не поддерживают протокол tls совсем. Список таких браузеров можно увидеть в соответствующем разделе отчета.  Я не думаю, что будет потеряно ну очень большое число клиентов. Оцените сами.

При увеличение длины ключей, оценки еще возрастут. При этом и возрастет нагрузка на сервер, особенно с учетом того, что мы собираемся передавать ВСЕ данные в зашифрованном виде. Соответственно может увеличится время загрузки страниц. Также можно оставить только протокол TLS v 1.2. Оценка то же возрастет. Но при этом доступ к сайту будет ограничен только посетителями с новейшими браузерами и значительная часть клиентов будет потеряна. Поэтому тот результат, которой получен сочтем достаточно хорошим компромиссом и на этом остановимся.

Описана оптимизация Apache и улучшение безопасности за счет запрета ряда устаревших протоколов и алгоритмов шифрования.

www.stseprounof.org

Оптимизация VDS сервера на Apache 2.x

В последнее время стала ощущаться нехватка памяти на VDS-сервере (т/е. виртуальном сервере). Всё это похоже из-за того, что у меня VDS крутяться несколько сайтов — то .  TOP выдавал страшные цифры Inact — больше 100mb.Большую часть памяти сжирали процесы httpd. Покапавшись на просторах необъятной нашел несколько рецептов ускорения работы VDS сервера под Apache 2.x

В отличии от более ранних версий Apache файл настройки веб-сервера разделенный. Нужные нам настройки Модуля Мультипроцессовой Обработки (MPM — Multi-Processing Module) находятся по адресу/usr/local/etc/apache22/extra/httpd-mpm.conf

Выглядит он как:## Server-Pool Management (MPM specific)#

## PidFile: The file in which the server should record its process# identification number when it starts.## Note that this is the default PidFile for most MPMs.#PidFile /var/run/httpd.pid

## The accept serialization lock file MUST BE STORED ON A LOCAL DISK.#LockFile /var/log/accept.lock

## Only one of the below sections will be relevant on your# installed httpd.  Use «apachectl -l» to find out the# active mpm.#

# prefork MPM# StartServers: number of server processes to start# MinSpareServers: minimum number of server processes which are kept spare# MaxSpareServers: maximum number of server processes which are kept spare# MaxClients: maximum number of server processes allowed to start# MaxRequestsPerChild: maximum number of requests a server process servesStartServers          5MinSpareServers       5MaxSpareServers      5MaxClients          30MaxRequestsPerChild   0

В этом файле настроек можно поменять следующие параметры:

Для себя оптимальные значения оставил следующие:

StartServers          5MinSpareServers       5MaxSpareServers      5MaxClients          30MaxRequestsPerChild   0

Но на этом конфигурация сервера еще не завершена. Модуль MPM (httpd-mpm.conf) может быть отключен. Для его включения необходимо в файле /usr/local/etc/apache22/httpd.conf раскоментировать строку (убрав # в начале строки)

# Include etc/apache22/extra/httpd-mpm.conf

ну и перезагружаем весь сервер или только Apache -apachectl -k restart.Готово )

p.s. Позже всё же остановился на варианте:

StartServers          2MinSpareServers       2MaxSpareServers      4MaxClients          20MaxRequestsPerChild   0

работает стабильно, посмотрим, в будущем может уменьшу до трех…

Дальнейшие действия по оптимизации

* Для используйте PHP  как модуль Apache

* Использовать сторонний почтовый сервис  — например сервис Яндекса Почта Для Доменов, у Гугла также есть подобный сервис. После этого смело можно отключить почтовый сервер (POP3 и IMAP) (Dovecot) и вебинтерфейс работы с электронной почтой (squirrelmail).

Поделиться ссылкой:

Понравилась статья?

lifewatch.ru

Оптимизация производительности Apache | ProGGear.ru

Введение

По данным Netcraft, Apache — самый популярный веб-сервер в интернет, онобслуживает множество серверов и сайтов. Часто возникает необходимостьувеличить производительность веб-сервера. Наверное лучший способ этосделать — перейти к схеме frontend+backend, но это может потребоватьдостаточно серьезных изменений в приложении (например, у вас навернякаотвалятся всяческие индикаторы прогресса аплоада файлов).

Другой способ — просто увеличить производительность сервера — поставитьболее быстрый процессор и больше памяти.

Однако и первое и второе требует много времени и ресурсов, так что напервое время можно попробовать ускорить 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, пожертвовавпроизводительностью.

Если важна именно производительность, то выбор ограничивается двумяmpm: prefork и worker.

Worker — поточный MPM, т.е. в нем каждый запрос обслуживается вотдельном потоке одного из дочерних процессов. Потоки — более легкиедля ОС объекты, чем процессы, они более эффективно используют память ипереключения контекста для них происходят быстрее. Однако, из-за тогочто каждый поток имеет доступ ко всей памяти процесса, worker mpm болееподвержен сбоям: сбой одного потока может повлечь падение всегопроцесса, в котором находился этот поток (именно поэтому 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-сервера. Поэтомуследите чтобы эта директива всегда была выключена (HostnameLookupsOff), а если вам все-таки нужны dns-адреса, вы можете узнать их позже,прогнав лог в утилите logresolve (которая поставляется с apache).

Кроме того, следите чтобы в директивах Allow from и Deny Fromиспользовались ip-адреса а не доменные имена. Иначе apache будет делатьдва dns запроса (обратный и прямой) чтобы убедиться что клиент-тот закого себя выдает.

AllowOverride

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

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

AllowOverride None</Directory><Directory /var/www/html/>AllowOverride all</Directory>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 Мб.

Вы можете прикинуть примерный размер посмотрев на колонку rss в выводе`ps -ylC httpd —sort:rss`

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

MinSpareServers, MaxSpareServers, и StartServers

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

Постарайтесь установить такие MinSpareServers и MaxSpareServers, чтобыapache не создавал более 4 процессов/потоков в секунду. Если он создастболее 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). Если файл не изменяется, то его всегда следуетпопробовать закешировать на клиенте. Тогда у клиента будут быстреезагружаться страницы, а сервер освободится от лишних запросов.

Оригинал: «Configuring Apache for Maximum Performance».Vishnu Ram V: https://linuxgazette.net/123/vishnu.html

Оригинал: https://greenmice.info/ru/node/98

Просмотров: 1163

Похожие посты

proggear.ru

Оптимизация apache для просмотра 10K + wordpress в день на 2 ГБ ОЗУ E6500 CPU Сервер Server

Моя performance и caching WordPress

Это отличный stackи производительности WordPress для одиночного serverа с низким или средним rangeом или VPS. Я classифицирую средний range как одноядерный processор с объемом памяти 1 ГБ и довольно быстрыми дисками.

На вашем ящике это будет способно обслуживать более 10 тыс. Просмотров страниц в час

Серверный stack

Кэш PHP

WordPress Performance Plugin Stack

С W3 Total Cache мы используем диск для кеша страниц и минимизируем, так как Nginx будет очень быстро обслуживать наши статические fileы.

Как настроить Nginx для обслуживания статических fileов и передать PHP в Apache

Проблема с использованием только Apache заkeyается в том, что он открывает connection и набирает php для каждого requestа даже для статических fileов. Это отнимает соединения, потому что Apache будет держать их открытыми, и когда у вас будет много трафика, ваши соединения будут увязнуть, даже если они не используются.

По умолчанию Apache прослушивает requestы на порт 80, который является веб-портом по умолчанию. Сначала мы собираемся внести изменения в наши fileы Apache conf и виртуальные хосты для прослушивания на порту 8080.

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

httpd.conf

отkeyить KeepAlive

ports.conf

NameVirtualHost *:8080 Listen 8080

За виртуальный хост websiteа

<VirtualHost 127.0.0.1:8080> ServerAdmin [email protected] ServerName yoursite.com ServerAlias www.yoursite.com DocumentRoot /srv/www/yoursite.com/public_html/ ErrorLog /srv/www/yoursite.com/logs/error.log CustomLog /srv/www/yoursite.com/logs/access.log combined </VirtualHost>

Вы также должны установить mod_rpaf, чтобы ваши журналы содержали реальные IP-адреса ваших посетителей. Если ваши журналы не будут иметь 127.0.0.1 в качестве исходного IP-адреса.

Nginx Config

В Debian вы можете использовать репозитории для установки, но они содержат только версию 0.6.33. Чтобы установить более позднюю версию, вы должны добавить пакеты lenny backports

$ nano /etc/apt/sources.list

Добавьте эту строку в file deb http://www.backports.org/debian lenny-backports main

$ nano /etc/apt/preferences

Добавьте в file следующее:

Package: nginx Pin: release a=lenny-backports Pin-Priority: 999

Выполните следующие команды, чтобы importировать key из backports.org, чтобы проверить пакеты и обновить базу данных пакета вашей системы:

$ wget -O - http://backports.org/debian/archive.key | apt-key add - $ apt-get update

Теперь установите с помощью apt-get

apt-get install nginx

Это намного проще, чем компиляция из источника.

Конфигурация Nginx conf и fileов serverа

nginx.conf

user www-data; worker_processes 4; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; client_body_temp_path /var/lib/nginx/body 1 2; gzip_buffers 32 8k; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; gzip on; gzip_comp_level 6; gzip_http_version 1.0; gzip_min_length 0; gzip_types text/html text/css image/x-icon application/x-javascript application/javascript text/javascript application/atom+xml application/xml ; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }

Теперь вам нужно настроить виртуальный хостинг Nginx. Мне нравится использовать метод, поддерживающий websiteы, с каждым v host sym, связанным с fileом в directoryе, доступном для websiteов.

$ mkdir /etc/nginx/sites-available $ mkdir /etc/nginx/sites-enabled $ touch /etc/nginx/sites-available/yourservername.conf $ touch /etc/nginx/sites-available/default.conf $ ln -s /etc/nginx/sites-available /etc/nginx/sites-enabled $ nano /etc/nginx/sites-enabled/default.conf

default.conf

Заметка:

Статические parameters кеша в следующих fileах будут работать только в том случае, если вkeyен плагин интегратора proxy-serverа Nginx.

proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=staticfilecache:180m max_size=500m; proxy_temp_path /var/lib/nginx/proxy; proxy_connect_timeout 30; proxy_read_timeout 120; proxy_send_timeout 120; #IMPORTANT - this sets the basic cache key that's used in the static file cache. proxy_cache_key "$scheme://$host$request_uri"; upstream wordpressapache { #The upstream apache server. You can have many of these and weight them accordingly, #allowing nginx to function as a caching load balancer server 127.0.0.1:8080 weight=1 fail_timeout=120s; }

На websiteе WordPress conf (для нескольких websiteов вам нужен только один vhost)

server { #Only cache 200 responses, and for a default of 20 minutes. proxy_cache_valid 200 20m; #Listen to your public IP listen 80; #Probably not needed, as the proxy will pass back the host in "proxy_set_header" server_name www.yoursite.com yoursite.com; access_log /var/log/nginx/yoursite.proxied.log; # "combined" matches apache's concept of "combined". Neat. access_log /var/log/apache2/nginx-access.log combined; # Set the real IP. proxy_set_header X-Real-IP $remote_addr; # Set the hostname proxy_set_header Host $host; #Set the forwarded-for header. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { # If logged in, don't cache. if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) { set $do_not_cache 1; } proxy_cache_key "$scheme://$host$request_uri $do_not_cache"; proxy_cache staticfilecache; proxy_pass http://wordpressapache; } location ~* wp\-.*\.php|wp\-admin { # Don't static file cache admin-looking things. proxy_pass http://wordpressapache; } location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ { # Cache static-looking files for 120 minutes, setting a 10 day expiry time in the HTTP header, # whether logged in or not (may be too heavy-handed). proxy_cache_valid 200 120m; expires 864000; proxy_pass http://wordpressapache; proxy_cache staticfilecache; } location ~* \/[^\/]+\/(feed|\.xml)\/? { # Cache RSS looking feeds for 45 minutes unless logged in. if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) { set $do_not_cache 1; } proxy_cache_key "$scheme://$host$request_uri $do_not_cache"; proxy_cache_valid 200 45m; proxy_cache staticfilecache; proxy_pass http://wordpressapache; } location = /50x.html { root /var/www/nginx-default; } # No access to .htaccess files. location ~ /\.ht { deny all; } }

Self Hosted CDN conf

Для вашего собственного CDN conf вам нужно только настроить его для обслуживания статических fileов без proxy-прохода

server { proxy_cache_valid 200 20m; listen 80; server_name yourcdndomain.com; access_log /srv/www/yourcdndomain.com/logs/access.log; root /srv/www/yourcdndomain.com/public_html/; proxy_set_header X-Real-IP $remote_addr; location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ { # Cache static-looking files for 120 minutes, setting a 10 day expiry time in the HTTP header, # whether logged in or not (may be too heavy-handed). proxy_cache_valid 200 120m; expires 7776000; proxy_cache staticfilecache; } location = /50x.html { root /var/www/nginx-default; } # No access to .htaccess files. location ~ /\.ht { deny all; } }

Теперь запустите serverы

$ /etc/init.d/apache2 restart $/etc/init.d/nginx start

Результаты тестов

На сканере Apache эта настройка может теоретически обслуживать 1833,56 requestов в секунду

$ ab -n 1000 -c 20 http://yoursite.com/

server.bilee.com

Оптимизация производительности Apache | Железный Линукс

Apache — популярный веб-сервер в интернет, он обслуживает множество серверов и сайтов. Часто возникает необходимость увеличить производительность веб-сервера. Наверное лучший способ это сделать — перейти к схеме frontend+backend, но это может потребовать достаточно серьезных изменений в приложении (например, у вас наверняка отвалятся всяческие индикаторы прогресса аплоада файлов :) .Другой способ — просто увеличить производительность сервера — поставить более быстрый процессор и больше памяти.Однако и первое и второе требует много времени и ресурсов, так что на первое время можно попробовать ускорить 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, пожертвовав производительностью.Если важна именно производительность, то выбор ограничивается двумя mpm: prefork и worker.Worker - поточный MPM, т.е. в нем каждый запрос обслуживается в отдельном потоке одного из дочерних процессов. Потоки — более легкие для ОС объекты, чем процессы, они более эффективно используют память и переключения контекста для них происходят быстрее. Однако, из-за того что каждый поток имеет доступ ко всей памяти процесса, worker mpm более подвержен сбоям: сбой одного потока может повлечь падение всего процесса, в котором находился этот поток (именно поэтому 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 запроса (обратный и прямой) чтобы убедиться что клиент-тот за кого себя выдает.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 процессов/потоков в секунду. Если он создаст более 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 секунд обычно достаточно.

hardlinux.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта