Тюнинг Apache исходя из возможностей сервера


Я не однократно сталкивался с тем что сервера начинают "задыхаться" при увеличении количества посетителей.
При этом на сервере запущена тонна процессов Apache, которые кушают всю оперативную память, сайты, в свою очередь, становится недоступны.

Проблема кроется в том, что Apache работает со своими стандартными настройками. В частности настройки mod_prefork или mod_worker. Именно в них определяется максимально допустимое количество дочерних процессов. По умолчанию выставлены вот такие настройки:

  StartServers 5
  MinSpareServers 5
  MaxSpareServers 10
  MaxClients 256
  ServerLimit 256
  MaxRequestsPerChild 1000

По своей душевной наивности, люди считают что их сервер сможет обработать за секунду 256 соединений или просто не знают что эти настройки нужно скрутить в меньшую сторону. Как ни прискорбно это осознавать, но сервер с 2Gb оперативной памяти, при значении php.memory_limit в 128Mb за один раз сможет обработать не больше 16-ти (!!!) входящих соединений, при условии что для обработки скрипта будет выделен максимальный объем памяти. А если учитывать тот факт, что каждый дочерний процесс будет держаться в памяти пока не отработает 1000 запросов, то значение MaxClients равное 256 выглядит по-детски наивным и утопическим.

На практике процессы Apache не выедают весь отведенный для них лимит. Как правило это значение - раза в два меньше.

Для того что бы узнать, как же ведет себя Apache и сколько памяти он потребляет можно скачать и выполнить вот такой скрипт:

curl http://cloudfiles.fanatassist.com/apachebuddy.pl | sudo perl

Если ссылка не работает, можете скачать его с моего блога:

curl http://www.tech-notes.net/wp-content/uploads/2014/03/apachebuddy.pl | sudo perl

В результате выполнения Вы получите вот такой вывод:
Screenshot from 2014-03-24 09:15:18

Или вот такой:
Screenshot from 2014-03-21

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

Исходя из опыта работы могу сразу сказать, что значение MaxClients лучше ставить 80-100 и дальше смотреть по ситуации. В большинстве случаев на "бюджетных" серверах это значение выставляется равным 30-40.

Увеличить возможности Вашего сервера, в плане обработки входящих запросов, можно с помощью Varnish.

Share Button
(Visited 261 times, 1 visits today)

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

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

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.