Я прочитал много сообщений о конфигурации Apache и попытался найти лучшие значения для наших серверов. Чтобы убедиться, что я использовал лучше всего JMeter имитировать 2100 соединений в секунду. После многих раундов тонкой настройки я получил следующую конфигурацию:
<IfModule prefork.c> StartServers 8 MinSpareServers 5 MaxSpareServers 10 ServerLimit 2048 MaxClients 2048 MaxRequestsPerChild 20000 </IfModule>
Детали сервера:
[root@web06 ~]# free
total used free shared buffers cached
Mem: 3814660 1070152 2744508 0 146788 766944
-/+ buffers/cache: 156420 3658240
Swap: 5210104 0 5210104
[root@web06 ~]# grep -c processor /proc/cpuinfo
4
[root@web06 ~]# uname --a
Linux web06 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux
Память, используемая одним процессом Apache:
[root@web06 ~]# cat /proc/5903/status | grep VmRSS
VmRSS: 10076 kB
Я знаю, что моя конфигурация немного высока, но конфигурация дала мне лучший результат на стресс-тесте. Буду признателен за ваш вклад, стоит ли что-то менять?
Обратите внимание: я знаю, что есть лучшая альтернатива Apache, но на данный момент у меня нет ресурсов, чтобы внести такие изменения.
Спасибо!
Хорошо, может ли ваш сервер выполнять 2048 одновременных процессов Apache (как вы установили в ServerLimit / MaxClients)? Бьюсь об заклад, это не так, и на самом деле вам не нужно столько одновременных рабочих Apache. Я настоятельно рекомендую вам настроить асинхронный обратный прокси, например nginx
или lighttpd
для разгрузки обработки клиентов с медленными подключениями к этому асинхронному прокси. И поверьте мне, большинство общедоступных веб-клиентов достаточно медленны, чтобы отнимать большую часть рабочего времени Apache только для загрузки в них уже сгенерированного контента. И я не думаю, что вам когда-либо понадобится более 25 одновременных рабочих Apache, если вы правильно настроите обратное проксирование.