ASP.NET Web Garden - ¿Cuántos Procesos De Trabajo Necesito?


¿ Cuál es la mejor práctica para decidir cuántos procesos de trabajo permitir un ASP.NET ¿aplicación web?

En un servidor que administro, la creación de un nuevo AppPool tiene por defecto 10 (máximo) procesos de trabajo. Otras personas sugieren que el ajuste normal es uno.

¿Qué problema resuelven los múltiples procesos de trabajo y cuáles son las técnicas para decidir cuántos?

Author: Tim Long, 2010-01-28

4 answers

Los procesos de trabajo son una forma de segmentar la ejecución de su sitio web a través de múltiples exes. Usted hace esto por un par de razones, una si uno de los trabajadores se ve golpeado por problemas de tiempo de ejecución que no toma los demás hacia abajo. Por ejemplo, si llega una solicitud html que hace que el proceso se quede sin nada, entonces solo las otras solicitudes que están siendo manejadas por ese procesador worker se matan. Otro ejemplo es que una solicitud podría causar bloqueo contra los otros hilos manejado por el mismo trabajador.

En cuanto a la cantidad que necesita, haga algunas pruebas de carga. Golpea la aplicación con fuerza y ver lo que sucede con solo uno. A continuación, añadir un poco más y golpear de nuevo. En algún momento llegará a un punto de saturar realmente la red de las máquinas, el disco, la cpu y la ram. Ahí es cuando sabes que tienes el equilibrio correcto.

Por cierto, puede controlar el número de subprocesos utilizados por proceso de trabajo a través de la máquina.archivo de configuración. Creo que la clave es maxWorkerThreads.

Ahora, tenga cuidado, si usa sesión, el estado de sesión no se comparte entre los procesos de trabajo. Generalmente recomiendo evitar la sesión de todos modos, pero es algo a considerar.

A todos los efectos, puede considerar cada proceso de trabajo como su propio servidor web separado. Excepto que están corriendo en la misma caja.

 51
Author: NotMe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-28 00:15:23

Las pautas aquí son bastante buenas: http://msdn.microsoft.com/en-us/library/ms998549.aspx

 4
Author: Bryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-28 01:38:54

Fugas de memoria

La otra gran ventaja es manejar las fugas de memoria. A veces, cuánto intenta optimizar su código, pero hay fugas de memoria en el propio marco y otras bibliotecas de terceros. Notamos que eventualmente nuestra aplicación alcanza una memoria muy alta y comienza a no dar excepciones de memoria.

Así que tuvimos que establecer un límite máximo de memoria virtual en el proceso de trabajo como 1GB y permitir que se ejecuten varios procesos. Usted podría establecer límite virtual máximo incluso para el proceso de un solo trabajador, pero esto conduce a picos de ralentización, ya que cuando se recicla el proceso del trabajador, todas las solicitudes son lentas hasta que el proceso del trabajador gana una buena velocidad. Como nuestra aplicación tiene almacenamiento en caché interno (Entity Framework Query Cache, algunos grupos de objetos), cada una de estas cosas ralentiza el inicio de la aplicación. Aquí es donde el proceso de un solo trabajador duele más.

Si hay varios procesos de trabajo, solo uno de los procesos en modo de reciclaje es lento, pero otros mantienen buena velocidad.

 4
Author: Akash Kava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-31 06:51:21

Otro caso en el que tiene sentido tener muchos procesos de trabajo es si su aplicación contiene bloqueos que impiden su paralelización. El procesamiento de imágenes basado en GDI + es uno de los ejemplos.

Lo encontré cuando traté de encontrar una solución para mi problema.

 1
Author: Marat Safin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:08