Мы экспериментировали с конфигурацией Apache 2.2 и mod_wsgi в Linux 3.8, чтобы проверить его поведение в условиях интенсивного параллельного трафика. Мы использовали ApacheBench (v2.3) для создания трафика с той же машины.
Мы получили установку, работающую довольно хорошо с 1000 потоков (10 процессов со 100 потоками), но столкнулись с проблемами при попытке масштабирования оттуда. С 10000 потоков (10 процессов 1000 потоков) сервер действительно стал медленнее и начал работать очень плохо с тем же количеством одновременных запросов.
Что является ограничивающим фактором для производительности с большим количеством потоков Apache? Почему 10000 потоков работают хуже, чем 1000 потоков? Что вообще ограничивает количество потоков? Мы понимаем, что в обычных веб-сервисах 10000 одновременных подключений - это не повседневный бизнес, но мы пытаемся лучше понять масштабируемость веб-серверов и различные типы веб-серверов.
Вот наша настройка рабочего MPM на 1000 потоков, которая работает очень хорошо.
<IfModule mpm_worker_module>
StartServers 10
MinSpareThreads 1000
MaxSpareThreads 1000
ThreadLimit 1000
ThreadsPerChild 100
MaxClients 1000
MaxRequestsPerChild 0
</IfModule>
Настройка mpm worker на 10000 потоков. Эта установка была в 5 раз медленнее.
<IfModule mpm_worker_module>
StartServers 10
MinSpareThreads 10000
MaxSpareThreads 10000
ThreadLimit 10000
ThreadsPerChild 1000
MaxClients 10000
MaxRequestsPerChild 0
</IfModule>