Apache 2.2 mpm_worker: ¿más hilos o más procesos?

17

Al usar Worker MPM en Apache, puede manipular la cantidad de procesos secundarios y la cantidad de subprocesos del servidor por proceso secundario.

¿Cuales son las ventajas y desventajas de cada uno? ¿En qué circunstancias aumentaría uno u otro?

sh-beta
fuente

Respuestas:

25

Hasta ahora, estas han sido mis principales consideraciones al determinar Subprocesos vs Procesos:

  1. Los subprocesos utilizarán mucha menos memoria residente que los procesos. Sí, con las bibliotecas vinculadas dinámicamente, se comparte una gran cantidad de memoria entre el Proceso de control de Apache y sus Procesos hijos, sin embargo, cada nuevo Proceso deberá instanciar todos los módulos que ha habilitado.

    Esto es fácilmente comprobable comparando el uso de la memoria de cada proceso donde tiene, por ejemplo, 5 procesos y 1 subproceso cada uno o 5 procesos y 25 subprocesos cada uno. En mi caso aquí, cada proceso secundario ocupa aproximadamente 7 MB, independientemente de la cantidad de subprocesos.

    + Para hilos

  2. Se tarda más en iniciar en términos de tiempo y ciclos de CPU para cargar un nuevo proceso que un subproceso. Esto puede probarse verificando la cantidad promedio de páginas servidas a través de 'ab'.

    + Para hilos

  3. Todos los subprocesos de procesos dependen del proceso. La mayor preocupación aquí, es que si algo le sucede al proceso, afectará a todos los subprocesos que están asociados con él. Si está ejecutando con un solo proceso con un montón de subprocesos, cuando el proceso muere, también lo harán los subprocesos. Por lo tanto, más procesos causarían una mejor separación y, por lo tanto, una mayor tolerancia a "fallas" si lo desea.

    + Para procesos

  4. En relación con (3), para módulos como PHP, el proceso carga su memoria y la comparte en todos los subprocesos. Esto significa que si tiene php con memory_limit establecido en 100Mbs con 25 subprocesos a continuación, técnicamente con una carga máxima, cada subproceso podría asignar un máximo de 4 MB cada uno (por supuesto, esto no sucederá de esta manera, algunos se acumularán, algunos lo harán) morir de hambre ).

Entonces, al final, realmente depende de su caso de uso. Dicho esto, querrá maximizar la cantidad de subprocesos utilizados para disminuir el uso de memoria y aumentar la capacidad de respuesta. Sin embargo, tendrá que equilibrar eso con una cantidad adecuada de Procesos para una mejor tolerancia a fallas.

Por supuesto, no soy un experto aquí, ya que recientemente he tenido que preocuparme por esto, ¡así que espero ver qué otras respuestas podrían aparecer aquí!

jonathanserafini
fuente
1
+1 para alguna buena información general. Sin embargo, me gustaría ver más profundidad / detalles concretos si es posible.
sh-beta