systemadmin.es > LAMP y web > Gestión de procesos Apache con MPM prefork

Gestión de procesos Apache con MPM prefork

Existe cierta confusión en la forma que Apache trata las variables StartServers, MinSpareServers, MaxSpareServers y MaxRequestsPerChild del modulo prefork. Vamos a ver su significado y como las trata Apache y como deberemos ajustarlas para un optimo rendimiento.

Con el MPM prefork existe un proceso principal (indentificable por tener el UID con el que lo arrancamos, normalmente root) que es que se encarga de crear nuevos procesos hijo (en adelande apachitos) y se mantiene a la escucha esperando nuevas conexiones de clientes.

  • Al arrancar el servidor web, mediante la directiva StartServers, se indica cuantos procesos hijo se crean, por lo que dependiendo del consumo fijo de memoria que queremos asumir de apache deberemos dimensionar a más o menos procesos.

    En este punto debemos ser un poco conservadores, ya que realizar una llamada fork() es costosa, por lo que si exageramos el valor vamos a tardar más tiempo a empezar a servir peticiones en lugar de hacer esperar un poco más (el fork() adicional) a las iniciales, que en dicho caso al menos hemos empezado.

  • Por otro lado tenemos la variable MinSpareServers, que controla el número mínimo de apachitos en espera (estado Idle) deja para servir nuevas conexiones. En el caso que haya menos apachitos Idle que el valor de MinSpareServers cada segundo crea uno nuevo hasta cubrir las necesidades.
  • Por otro lado tenemos la variable MaxSpareServers, que indica el número máximo de apachitos en estado Idle. Por lo tanto, esta variable controla el caso contrario que MinSpareServers, si existe un exceso de apachitos los destruye para evitar el consumo innecesario de recursos.
  • No hace falta decir que el número de apachitos crecerá como mucho hasta llegar a MaxClients/ServerLimit, pero generalmente no es una buena idea tener un número alto de apachitos sin hacer nada, ya que consumen unos recursos que se podrían usar para alguna otra cosa. Así, como regla general, se deberían mantener las variables MinSpareServers y MaxSpareServers con una proporción de acuerdo con el número de apachitos activos.

    Evidentemente, si definimos un MaxSpareServers por debajo MinSpareServers queda una configuración absurda. Es por esto que automáticamente el valor de MaxSpareServers se transforma en MinSpareServers+1

  • Finalmente tenemos la poco conocida variable MaxRequestsPerChild, que controla cada cuantas peticiones se recicla un apachito: Si ha servidor cierta cantidad de peticiones, se mata el apachito para que otro lo substituya, de esta manera se pueden mantener a raya los memory leaks.

3 comments to “Gestión de procesos Apache con MPM prefork”

  1. Entonces, y aún a costa de saber que no hay una respuesta perfecta, ¿podrías decir tres configuraciones de esos valores para carga baja, media y alta?

    ¿Cómo podemos saber si hemos puesto bien esos valores, si nos hemos quedado cortos o nos hemos pasado?

  2. Un artículo interesante, me gusta.

    Para Jose Alberto, puedes hacerte una idea en el siguiente artículo http://miguelangelnieto.net/?action=view&url=tuning-de-apache-con-cabeza, que como veràs y en respuesta a tu pregunta, los números candidatos dependen principalmente de la memória ram disponible.

    Saludos!

  3. Los números se hacen de mal decir, pero puedes contarlo como la pendiente que tienes de tráfico a lo largo del día

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>