
Recientemente moví mi mpm de perfork a event (y también mod_php (php7.0) a php-fpm (proxy_fgi)). Estimé que mi carga máxima de conexión simultánea era de alrededor de 300. Entonces configuré la siguiente configuración en mpm_event.conf
StartServers 5
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 35
MaxRequestWorkers 350
MaxConnectionsPerChild 0
Ahora veo un comportamiento extraño cuando observo el proceso de Apache2 y el número total de subprocesos usando ps
Normalmente tengo entre 12 y 13 procesos apache2 en total ( ps aux | grep apache2 | wc -l
). Considerando que uno es padre... entonces son entre 10 y 11 niños. Además, si veo el recuento total de subprocesos de apache2 con
ps -o nlwp $(pidof apache2) | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
Observo 408 hilos durante mucho tiempo. Entonces mis preguntas son:
- ¿Cómo es posible que el número total de subprocesos aumente más allá de MaxRequestWorkers (350)?
- ¿Cómo es posible que el número total de procesos secundarios aumente más allá de StartServers (5)?
- ¿Cuál es la justificación del 408? (¿12*34?) ¿Mi tráfico está alcanzando un límite?
Gracias por tu ayuda de antemano
Respuesta1
Estoy observando un comportamiento similar. Con MaxRequestWorkers 150 predeterminado, llego a hasta 301 subprocesos, es decir, 1 subproceso principal y 2* MaxRequestWorkers.
Probé esto estableciendo MaxRequestWorkers en 40 y llegué a 81.
¿Alguien puede confirmar este comportamiento de Apache?
PD: Estoy ejecutando Apache2 como prefork, es decir, ThreadLimit y ThreadsPerChild no se usan en mi humilde opinión.