2010-01-27 10 views
52

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

En un servidor que administro, la creación de una nueva AppPool tiene como valor predeterminado 10 procesos de trabajo (como máximo). Otras personas sugieren que la configuración normal es uno.

¿Qué problema resuelve varios procesos de trabajo y cuáles son las técnicas para decidir cuántos?

+1

No estaba seguro de si esto sería más apropiado aquí o en ServerFault, avíseme si hice una elección incorrecta y la moveré. –

+4

Adelante y pregunte en ambos lugares. Creo que tu pregunta es relevante aquí. Las características específicas de la implementación de ASP.Net a menudo caen en el área de experiencia del desarrollador, especialmente en lo que respecta a la optimización de la aplicación. – DOK

+6

Estoy de acuerdo con DOK. Ambos lugares son apropiados. Los de Dev son a menudo los que tienen que decirle a los chicos de la red cómo configurar el servidor. Debido a esto, necesitan tener esta información. – NotMe

Respuesta

47

Los procesos de trabajo son una forma de segmentar la ejecución de su sitio web a través de múltiples ejecutables. Hace esto por un par de razones, una si uno de los trabajadores es golpeado por problemas de tiempo de ejecución que no derriba a los demás. Por ejemplo, si aparece una solicitud html que causa que el proceso se ejecute en nada, entonces solo las otras solicitudes que están siendo manejadas por ese procesador de un trabajador mueren. Otro ejemplo es que una solicitud podría causar bloqueo contra los otros hilos manejados por el mismo trabajador.

En cuanto a la cantidad que necesita, realice algunas pruebas de carga. Pulse la aplicación con fuerza y ​​vea qué sucede con solo una. Luego agréguele algo más y golpéelo nuevamente. En algún punto, llegará a un punto de saturar verdaderamente la red de las máquinas, el disco, la CPU y el ram. Es entonces cuando sabes que tienes el equilibrio correcto.

Por cierto, puede controlar el número de subprocesos utilizados por proceso de trabajo a través del archivo machine.config. Creo que la clave es maxWorkerThreads.

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

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

+1

De hecho, fue un problema con el estado de la sesión lo que provocó esta pregunta (ver http://stackoverflow.com/questions/2147578/asp-net-session-state-and -multiple-worker-processes). Gracias por una respuesta útil (+1) –

+2

La configuración predeterminada es normalmente una. Su servidor que por defecto es 10 debe haber sido modificado para cambiar sus valores predeterminados. – NotMe

+1

@ChrisLively, el estado de la sesión se comparte entre los procesos del trabajador, de hecho, el estado de la sesión también se comparte entre varios sitios web que también tienen el mismo nombre de cookie. –

4

pérdidas de memoria

La otra ventaja más grande es el manejo de las pérdidas de memoria. A veces, siempre intenta optimizar su código, pero hay pérdidas de memoria en el marco mismo y en otras bibliotecas de terceros. Notamos que eventualmente nuestra aplicación alcanza una memoria muy alta y comienza a dar excepciones a la memoria.

Así que tuvimos que establecer un límite máximo de memoria virtual en el proceso de trabajo para que parezca 1GB y permitir que se ejecuten varios procesos. Puede establecer el límite virtual máximo incluso para el proceso de trabajador individual, pero esto lleva a un aumento de la velocidad, ya que cuando se recicla el proceso de trabajo, todas las solicitudes son lentas hasta que el proceso de trabajo en tiempo gana buena velocidad. Como nuestra aplicación tiene caché interno (Entity Framework Query Cache, algunos pools de objetos), cada uno de estos aspectos ralentiza el inicio de la aplicación. Aquí es donde el proceso de trabajador individual duele más.

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

1

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 my problem.

Cuestiones relacionadas