ASP.NET procesa las solicitudes utilizando subprocesos del grupo de subprocesos de .NET. El grupo de subprocesos mantiene un grupo de subprocesos que ya han incurrido en los costos de inicialización de subprocesos. Por lo tanto, estos hilos son fáciles de reutilizar. El grupo de subprocesos de .NET también se autoajusta. Supervisa la utilización de la CPU y de otros recursos, y agrega nuevos subprocesos o recorta el tamaño del grupo de subprocesos según sea necesario. En general, debe evitar crear subprocesos manualmente para realizar el trabajo. En cambio, use hilos del grupo de subprocesos. Al mismo tiempo, es importante asegurarse de que su aplicación no realice operaciones de bloqueo prolongadas que podrían llevar rápidamente a la inanición del grupo de subprocesos y a las solicitudes HTTP rechazadas.
E/S de disco, llamadas al servicio web, son todas de bloqueo. Se optimizan mejor mediante el uso de llamadas asincrónicas. Cuando realiza una llamada asincrónica, asp.net libera su hilo y la solicitud se asignará a otro hilo cuando se invoque la función de devolución de llamada.
Para configurar el número de hilos se puede establecer:
<system.web>
<applicationPool maxConcurrentRequestsPerCPU="50" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/>
</system.web>
Consulte: ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0
Estos son el escenario que Microsoft best practices recommend:
- Conjunto maxconnection a 12 * # de CPUs. Esta configuración controla la cantidad máxima de conexiones HTTP salientes que puede iniciar desde un cliente. En este caso, ASP.NET es el cliente. Establezca maxconnection a 12 * # de CPU.
- Establezca maxIoThreads en 100. Esta configuración controla la cantidad máxima de subprocesos de E/S en el grupo de subprocesos de .NET. Este número se multiplica automáticamente por la cantidad de CPU disponibles. Establezca maxloThreads en 100.
- Establezca maxWorkerThreads en 100. Esta configuración controla el número máximo de subprocesos de trabajo en el grupo de subprocesos. Este número se multiplica automáticamente por la cantidad de CPU disponibles. Establezca maxWorkerThreads en 100.
- Establezca minFreeThreads en 88 * # de CPU. El proceso de trabajo utiliza esta configuración para poner en cola todas las solicitudes entrantes si el número de subprocesos disponibles en el grupo de subprocesos cae por debajo del valor de esta configuración. Esta configuración limita efectivamente la cantidad de solicitudes que se pueden ejecutar simultáneamente en maxWorkerThreads - minFreeThreads. Establezca minFreeThreads en 88 * # de CPU. Esto limita el número de solicitudes concurrentes a 12 (suponiendo que maxWorkerThreads sea 100).
- Establezca minLocalRequestFreeThreads en 76 * # de CPU. El proceso de trabajo utiliza esta configuración para poner en cola solicitudes de localhost (donde una aplicación web envía solicitudes a un servicio web local) si la cantidad de subprocesos disponibles en el grupo de subprocesos cae por debajo de este número. Esta configuración es similar a minFreeThreads, pero solo se aplica a las solicitudes del localhost desde la computadora local. Establezca minLocalRequestFreeThreads en 76 * # de CPU.
Nota: Las recomendaciones que se proporcionan en esta sección no son reglas. Ellos son un punto de partida.
Tendría que comparar su aplicación para encontrar lo que funciona mejor para su aplicación.
Tenga cuidado con el valor de configuración de las mejores prácticas de Microsoft, el artículo fue escrito en 2004 (!). Sin embargo, buena respuesta! –
Afinar los números anteriores realmente funciona – jbro91837