Límites de CPU para agrupaciones de aplicaciones en IIS 7.5

8

Veo que en iis 7.5 puedo establecer un límite de utilización de% de CPU para un período de tiempo especificado para un grupo de aplicaciones. También puedo hacer que elimine el proceso de trabajo si se viola este límite. Si le dice que haga esto, ¿se reiniciará automáticamente el proceso de trabajo después de que se elimine o se requiere intervención manual?

En Stack Overflow se menciona que se puede reiniciar al finalizar el intervalo ...

Kyle Brandt
fuente

Respuestas:

4

Este parece uno de esos casos en los que la simulación (o el acceso al código fuente ...> suspiro <) probablemente será la única forma de ver cuál es el comportamiento con cierto grado de confianza.

La documentación para la entrada del registro de eventos para el reciclaje de cuotas de CPU habla sobre el reciclaje de la siguiente manera:

De forma predeterminada, el reciclaje del grupo de aplicaciones se superpone, lo que significa que el proceso de trabajo que se va a cerrar se mantiene en ejecución hasta que se inicia un nuevo proceso de trabajo. Después de que comienza un nuevo proceso de trabajo, se le pasan nuevas solicitudes. El antiguo proceso de trabajo se cierra después de que termina de procesar sus solicitudes existentes, o después de un tiempo de espera configurado, lo que ocurra primero. Esta forma de reciclaje garantiza un servicio ininterrumpido a los clientes. Sin embargo, si una aplicación en el grupo de aplicaciones no puede ejecutar más de una instancia de sí misma a la vez, se puede deshabilitar la rotación superpuesta.

Me parece que, por definición, terminar un proceso de trabajo debido al consumo excesivo de CPU significaría que no se permitiría completar las solicitudes pendientes (ya que están agotando la cuota de CPU).

Para hablar de su mayor preocupación: no veo nada que me haga creer que un nuevo proceso de trabajo no se activaría automáticamente. La declaración en su enlace de desbordamiento de pila me hace cuestionar si el algoritmo utilizado por IIS puede, de hecho, vincular el reciclaje con la resolución del temporizador utilizado para medir el agotamiento de la cuota de CPU. La mejor manera que sé para determinar eso sería escribir un componente del lado del servidor que desperdicie CPU, implementarlo en un entorno de prueba y ver cómo actúa su comportamiento de reciclaje. Un componente simple que se sienta en un bucle cerrado durante unos segundos y luego devuelve una cadena conocida, combinada con un cliente que ejecuta un arnés de prueba con algo así como un grupo de procesos paralelos "wget" podría ser suficiente.

Evan Anderson
fuente
Ya parece que podría tener que probarlo. Ya escribí un script de prueba de carga única en Python para probar este tipo de cosas que ha sido útil ... tuve que usar una versión pirateada de socket y biblioteca http para poder vincularme a diferentes IP de origen :-)
Kyle Brandt
Sin embargo, una solicitud podría ser suficiente ... aplicación web que calcula pi ...
Kyle Brandt
@ Kyle: Sin embargo, no haré una solicitud infinita. Haría algo que, una vez que recibe algunas solicitudes "en vuelo", satura la CPU del servidor, pero finalmente devuelve un resultado. De esa forma, su equipo de prueba puede informar sobre el éxito / fracaso de todas las solicitudes que realiza. De lo contrario, no tiene idea de si el comportamiento de reciclaje en realidad resulta en una interrupción del servicio para los clientes o no.
Evan Anderson
Oh, ya veo lo que estás diciendo ... no era realmente el objetivo principal de esta prueba ... pero era una buena información. Solo quiero ver cuándo se mata, si vuelve o no. El límite de la CPU será algo así como el 90% durante 5 minutos en algo que podría ser un uso del 5-10%. Básicamente, está roto :-)
Kyle Brandt
Mis propias pruebas muestran que la ejecución de un grupo de aplicaciones en 1 minuto de actualización con un límite de CPU de 1 (muy pequeño), cuando se alcanza el límite, se registra un Evento del sistema 5025 y el grupo de aplicaciones se detiene , matando el proceso w3wp. Una vez que finaliza el límite de tiempo, se reinicia el grupo de aplicaciones.
brillante
4

Teniendo en cuenta los comentarios en la otra respuesta, he realizado mis propias pruebas, que replicaré aquí.

En mis pruebas, limitar un grupo de aplicaciones (v4.0 integrado) a un pequeño límite de CPU (0.01%) y un pequeño intervalo (1 minuto) con la acción KillW3WP habilitada, superar este límite mata el w3wp al detener el grupo de aplicaciones .

Después de alcanzar el límite de intervalo, el grupo de aplicaciones se reinicia automáticamente .

Cambiar la acción a Sin acción no altera el proceso w3wp.

En ambos casos, se registra un Evento del sistema 5025.

brillante
fuente