Настройка httpd.conf на VPS под Unix Apache.

Опубликовано admin в Пнд, 18/04/2011 - 23:03
Обычно после покупки VPS наступает период эйфории – много ресурсов, много возможностей, по сравнению с виртуальным хостингом все работает быстро и хорошо. Но через некоторое время, по мере роста сайта, возникают проблемы. Чаще всего они выражены в нехватке оперативной памяти, либо в низкой скорости отклика сайта на действия пользователей. Не стоит сразу переходить на более высокий тариф, можно попробовать настроить Apache под свои нужды.

Для настройки нам понадобится файл httpd.conf, который расположен тут – etc/httpd/conf/.

Открываем – смотрим – видим:

# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to “Off” to deactivate.
#
KeepAlive off

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15

##
## Server-Pool Size Regulation (MPM specific)
##

# 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
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 5
ServerLimit 10
MaxClients 10
MaxRequestsPerChild 4000
</IfModule>

Разберем по-порядку настройки.

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

MaxKeepAliveRequests – количество запросов в 1 соединении.

KeepAliveTimeout – Время жизни (в секундах) соединения. При больших значениях сервер не закрывает процесс слишком долго и он висит бесполезно занимая часть ресурсов.

Мы подошли к настройке MPM (модуль многопоточной обработки). В apache любой запрос обрабатывается в процессе или потоке. За многопоточность как раз и отвечает MPM. При установке сервера можно выбрать один из нескольких модулей. Почему prefork MPM, а не worker MPM? По умолчанию для unix используется именно prefork, но на всякий случай можно выполнить через SSH – подключение команду ‘httpd -V‘. В моем случае ответ – Server MPM: prefork. Работает prefork следующим образом – модуль создает несколько дочерних процессов, при этом в каждом процессе только один поток. В отличае от worker, который обрабатывает несколько потоков на процесс, prefork потребляет больше ресурсов, но более стабилен. В основном этим и обусловлен выбор, хотя многие считают, что worker работает быстрее.

Переходим непосредственно к настройке.

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

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

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

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

ServerLimit – эта директива устанавливает максимальное значение MaxClients. Рекомендуется устанавливать это значение равным значению в директиве Maxclients.

MaxClients - следует обратить внимание, что это самый важный параметр настройки Prefork MPM. Директива устанавливает максимальное количество параллельных процессов, создаваемых для обработки запросов. Чем больше значение, тем больше одновременно может быть обработано запросов и тем больше будет израсходовано памяти. При использовании динамических страниц с PHP на процесс может быть выделено 16-32МБ. Чтобы определить точнее необходимо через SSH-соединение выполнить команду ‘ps -ylC httpd –sort:rss‘ (между y и С находится строчная буква L!, а перед sort 2 минуса). На выходе мы получим табличку, где в колонке RSS и будут находится искомые значения занятой памяти, для получения значений в мегабайтах их нужно разделить на 1024. Для получения общей информации о памяти можно выполнить команду ‘free -m‘. Теперь можно рассчитать примерное значение самого параметра по любой из формул:

MaxClients ≈ (RAM – размер_загруженных_приложений)/(размер_процесса), либо
MaxClients ≈RAM* 70% / Max_размер_памяти_под_процесс.

Вторая формула чисто эмпирическая, и менее точная, расход памяти приложениями сервера заложен в 30% и, в зависимости от настроек, цифра может меняться в любую сторону. Полученное значение еще не гарантирует правильную работу сервера, следует понаблюдать некоторое время за распределением ресурсов. В случае если параметр установлен ниже оптимального значения, сервер под нагрузкой обслуживает MaxClients запросов, при этом память еще свободна, а следующие запросы уже отправляются в очередь, что приводит к замедлению работы сайта. Если же наоборот значение слишком высоко вся память будет занята, система залезет на диск и это приведет к резкому замедлению работы. Для оценки можно воспользоваться командой ‘top -p 30′ вверху можно будет увидеть значения памяти и загрузку процессора.

MaxRequestsPerChild – задает количество запросов, которые может обработать дочерний процесс до перезапуска. Значение должно быть достаточно большим, чтобы все время не создавать новые процессы. Но рекомендуется все же его ограничить (0 – неограниченно), чтобы при длительной работе Apache, в случае “утечки памяти”, процесс был принудительно завершен.

В моем случае простое включение KeepAlive с таймаутом в 1сек. дало заметный рост скорости отклика сайта. Более точная настройка MaxClients в сторону увеличения сбалансировала потребление памяти, и несколько ускорила отклик при большом наплыве посетителей.





Источник: http://www.xela.ru/2009/03/nastrojka-httpdconf-na-vps-pod-unix-apache/

( categories: )