Por que a contagem total de threads do Apache2 é maior que MaxRequestWorkers

Por que a contagem total de threads do Apache2 é maior que MaxRequestWorkers

Recentemente, mudei meu mpm de perfork para evento (e também mod_php (php7.0) para php-fpm (proxy_fgi)). Estimei minha carga máxima de conexão simultânea em cerca de 300. Então, defini a seguinte configuração em mpm_event.conf

StartServers                     5
MinSpareThreads          25
MaxSpareThreads          75
ThreadLimit                      64
ThreadsPerChild          35
MaxRequestWorkers         350
MaxConnectionsPerChild   0

Agora vejo um comportamento estranho quando observo o processo apache2 e a contagem total de threads usando ps

Normalmente tenho cerca de 12 a 13 processos apache2 no total ( ps aux | grep apache2 | wc -l). Considerando que um deles é pai... então são cerca de 10-11 filhos. Além disso, se eu ver a contagem total de threads do Apache2 com

ps -o nlwp $(pidof apache2) | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'

Eu observo 408 tópicos há muito tempo. Então minhas perguntas são:

  • como é possível que o número total de threads aumente além de MaxRequestWorkers (350)
  • como é possível que o número total de processos filhos aumente além dos StartServers (5)
  • Qual é a justificativa para 408? (12*34?) e meu tráfego está atingindo o limite?

Obrigado pela sua ajuda antecipadamente

Responder1

Estou observando um comportamento semelhante. Com MaxRequestWorkers padrão 150, alcanço até 301 threads - ou seja, 1 thread pai e 2 * MaxRequestWorkers threads.

Testei isso definindo MaxRequestWorkers como 40 e cheguei a 81.

Alguém pode confirmar esse comportamento do Apache?

PS: Estou executando o Apache2 como prefork, ou seja, ThreadLimit e ThreadsPerChild não são usados ​​IMHO.

informação relacionada