
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.