Апачская оптимизация - префорк MPM
Я прочитал много постов, касающихся конфигурации 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, но у меня нет ресурсов, чтобы сделать такого рода изменения в данный момент.
Спасибо!
1 ответ
Итак, способен ли ваш сервер выполнять одновременно 2048 процессов Apache (как вы установили в ServerLimit/MaxClients)? Бьюсь об заклад, это не так, и на самом деле вам не нужно так много одновременных работников Apache. Я настоятельно рекомендую вам установить асинхронный обратный прокси, например nginx
или же lighttpd
разгрузить обработку клиентов с медленными подключениями к этому асинхронному прокси. И поверьте мне, большинство общедоступных веб-клиентов работают достаточно медленно, чтобы тратить большую часть рабочего времени Apache только на загрузку уже созданного контента. И я не думаю, что вам когда-нибудь понадобится более 25 одновременно работающих Apache, если вы правильно настроите обратный прокси.