Источник: http://shurshun.ru/apache-prefork-mpm-worker/
Скорее всего вы уже имеете базовые знания о принципах работы и возможностях http сервера Apache, однако все равно начнем с небольшого экскурса в теорию. Большинство администраторов, которые работают с Apache, знают о двух моделях, с помощью которых Apache сервер отвечает на запросы — это prefork и mpm-worker.
Мультипроцессовых модулей (Multi-Processing Module) много (если судить по википедии), относительной популярностью пользуются три:
Основных типов два — это процесс и поток, для улучшения производительности иногда используют оба типа одновременно, порождая несколько процессов и кучу потоков в каждом:
Заходим на сервер по SSH:
apachectl -t -D DUMP_MODULES | grep mpm mpm_prefork_module (static) Syntax OK # httpd -V | grep MPM Server MPM: Prefork -D APACHE_MPM_DIR="server/mpm/prefork"
В /etc/sysconfig/httpd
снимаем комментарий со строчки и перегружаем демона:
HTTPD=/usr/sbin/httpd.worker
В конфигурации apache настраиваем режим работы модуля:
StartServers 1 MaxClients 50 MinSpareThreads 15 MaxSpareThreads 35 ThreadsPerChild 25 MaxRequestsPerChild 2000
ab -c 1 -n 10 http://example.com/index.html
Опция -c задает количество одновременных соединений, -n общее количество запросов.
В итоге получим среднюю суммарная скорость запроса в миллисекундах.
При с=1 — поведение характерно для единичного (случайного) посещения сайта, т.е. низкой нагрузки. Для дальнейшего тестирования увеличиваем количество моделируемых одновременных пользователей до ста.
Из статистики видим, имеем не такую уж большую разницу, для всех серверов. Расхождение в пределах 10% друг от друга.
Во втором тесте измерили время, требуемое серверу, для обработки большого количества запросов.
Запрашивали порядка 400 файлов с 1000 одновременно открытых соединений, т.е. порядка 400 000 статических страниц.
siege -b -c 1000 -r 403 —file=urls.txt
По статистике получили схожую картину.
Однако по процессору и памяти результаты разнились намного сильнее.
Для Nginx и Lighttpd загрузка процессора составила 40-50%, в то же время для остальных демонов загрузка процессора была порядка 70-90%.
Самое большое потребление памяти было во время работы Apache PreFork — 328 Мб оперативной памяти, самое низкое было для Apache worker — 237 Мб оперативной памяти.