Todos conocemos Windows Server y los roles y característica que nos ofrece Microsoft para facilitar nuestras cargas de trabajo.
En el día de hoy, vamos a hablar de Microsoft IIS (Internet Information Services) y de cómo podemos optimizar nuestros aplicativos webs.
No te quedes aquí y continúa leyendo 😊
Optimización Microsoft IIS: Queue Length
La longitud de cola predeterminada es 1000, que es suficiente para la mayoría de los servidores web. Si el servidor web necesita poner en cola más de 1000 solicitudes, IIS comenzará a rechazar solicitudes y empezará a registra el error 503 Service Unavailable.
No hay ninguna recomendación o fórmula para calcular el valor óptimo. Primero debemos auditar la cantidad de solicitudes que recibe nuestro IIS, en principio con 1000 debería de ser más que suficiente, en mi estudio, me he encontrado con casos que las peticiones superaban las 2000 solicitudes y he tenido que subirlo a 3000.
Por otro lado, es muy importante establecer el Start Mode a AlwaysRunning esto iniciará automáticamente el proceso de trabajo después de un reinicio del servicio IIS o del propio servidor.
Optimización Microsoft IIS: Enable HTTP keep-alive
Cuando un cliente visita una página web, el navegador realiza varias solicitudes para descargar toda la página.
Para cargar la página, el navegador puede iniciar conexiones separadas para cada elemento, como las imágenes. Al habilitar la opción “HTTP keep-alive”, el servidor mantiene la conexión abierta para estas múltiples solicitudes, lo que aumenta el rendimiento del servidor y el tiempo de respuesta.
Después de habilitar esta opción hemos visto como las peticiones se respondían incluso hasta 0,5 segundos más rápido.
Optimización Microsoft IIS: Idle Time-Out Action
Una solicitud en IIS se controla mediante un proceso de trabajo (w3wpexe). Cada grupo de aplicaciones tiene uno o más procesos de trabajo. De forma predeterminada, si un proceso de trabajo está inactivo (no se han recibido solicitudes) durante 20 minutos se termina (Se queda en modo inactivo).
Cuando llega una nueva solicitud después de que se termina un proceso de trabajo, el usuario experimenta el ciclo de puesta en marcha que consume más recursos. Si modificamos el valor de este campo y lo ponemos a 0, deshabilitamos el modo time-out con el objetivo de que no se ponga en modo inactivo tras 20 minutos sin recibir peticiones web, de esta forma estaremos ahorrando consumos de la puesta en marcha.
Optimización Microsoft IIS: Enable Dynamic Compression
IIS comprime el contenido estático (imágenes, archivos CSS, archivos HTML, etc.) de forma predeterminada para reducir el ancho de banda utilizado para las solicitudes. Al habilitar la compresión para contenido dinámico como páginas ASP.NET, también puede ahorrar ancho de banda para contenido dinámico.
El resultado es una disminución del tiempo de respuesta y una mejora del rendimiento del servidor web. Sin embargo, habilitar la compresión dinámica agrega carga adicional a la CPU (aproximadamente un 5% de sobrecarga de CPU).
Esto hay que tenerlo en cuenta a la hora de dimensionar correctamente el número de CPUs o vCPUs que asignamos a nuestro IIS. Esta configuración también nos ayuda a reducir el tamaño de los propios ficheros ASP ahorrando en espacio en disco duro del servidor web.
Optimización Microsoft IIS: Processor ThreadMax
Este parámetro es fundamental y el que marca la diferencia realmente. Especifica el número máximo de subprocesos de trabajo por procesador que ASP puede crear. El valor por defecto es 25.
Lo que quiere decir es que un procesador puede gestionar hasta 25 subprocesos por defecto, este valor puede aumentar hasta un máximo de 100.
Según las pruebas realizadas podemos afirmar que el valor óptimo para grandes cargas de trabajo es 50 subprocesos ya que duplicamos la capacidad de subprocesos sin sobrecargar en exceso los procesadores.
Optimización Microsoft IIS: Machine.config
Hay una serie de parámetros clave para conseguir un rendimiento extra en nuestro IIS y para ello debemos localizar nuestro machine.config y editar los siguientes parámetros:
maxWorkerThreads
Esta configuración se utiliza para definir el número máximo de subprocesos de trabajo que están disponibles en el grupo de subprocesos en un momento dado.Un grupo de subprocesos se compone de varios subprocesos, o bien, una colección de subprocesos para ser precisos, y se puede utilizar para realizar varias actividades en segundo plano.
Microsoft afirma: “Un grupo de subprocesos es una colección de subprocesos de trabajo que ejecutan de manera eficiente devoluciones de llamada asincrónicas en nombre de la aplicación. El grupo de subprocesos se utiliza principalmente para reducir el número de subprocesos de aplicación y proporcionar administración de los subprocesos de trabajo”.
Valor predeterminado de maxWorkerThreads es 20 por CPU y el valor recomendado es 100.
minWorkerThreads
Esta configuración determina el número mínimo de subprocesos de trabajo que están disponibles en el grupo de subprocesos para satisfacer una solicitud entrante. El valor predeterminado es 1 mientras que el valor recomendado es maxWorkerThreads / 2. Por lo tanto, si hemos definido maxWorkerThreads como 100 en el archivo machine.config, debemos especificar 50 como minWorkerThreads.
maxIOThreads
Esta configuración se utiliza para definir el número máximo de subprocesos que se asignan para realizar operaciones de Entrada/Salida. Tales operaciones incluyen operaciones de base de datos, llamadas a servicios web, acceso al sistema de archivos, etc. El valor predeterminado es 20 por CPU, mientras que se recomienda un valor de 100.
minIOThreads
Esto se utiliza para definir el número mínimo de subprocesos de E/S que están disponibles en el grupo de subprocesos en un momento determinado. El valor predeterminado es 1 mientras que el valor recomendado es maxIOThreads / 2. Por lo tanto, si hemos definido maxIOThreads como 100 en el archivo machine.config, debemos especificar a 50 como minIOThreads.
Pon aprueba tu IIS, aplica esta configuración y nos cuentas que tal te ha ido 😊.