
Недавно я перенес свой mpm с perfork на event (а также mod_php (php7.0) на php-fpm (proxy_fgi)). Я оценил максимальную нагрузку одновременных соединений примерно в 300. Поэтому я установил следующую конфигурацию в mpm_event.conf
StartServers 5
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 35
MaxRequestWorkers 350
MaxConnectionsPerChild 0
Теперь я вижу странное поведение, когда наблюдаю за процессом apache2 и общим количеством потоков с помощью ps.
Обычно у меня около 12-13 общих процессов apache2 ( ps aux | grep apache2 | wc -l
). Если один из них считать родительским... то получается около 10-11 дочерних. Далее, если я увижу общее количество потоков из apache2 с
ps -o nlwp $(pidof apache2) | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
Я уже давно наблюдаю за темой 408. Поэтому у меня такие вопросы:
- как возможно, что общее количество потоков превышает MaxRequestWorkers (350)
- как возможно, что общее количество дочерних процессов превышает StartServers (5)
- Каково обоснование ошибки 408? (12*34?) и достигает ли мой трафик лимита?
Заранее благодарны за Вашу помощь
решение1
Я наблюдаю похожее поведение. При значении MaxRequestWorkers по умолчанию 150 я достигаю 301 потока - т.е. 1 родительский и 2* потока MaxRequestWorkers.
Я проверил это, установив MaxRequestWorkers на 40, и получил значение 81.
Может ли кто-нибудь подтвердить такое поведение Apache?
PS Я запускаю Apache2 как prefork, т.е. ThreadLimit и ThreadsPerChild, ИМХО, не используются.