2011-08-24 18 views
6

Estamos viendo, bajo carga, que los datos de sesión se corrompen o faltan, pero las sesiones en sí permanecen presentes.Sesiones de ASP.NET dañadas bajo carga

Nuestro sitio web está alojado en IIS 7 ejecutando ASP.Net 4.0 y usando el estado de sesión InProc en una granja de servidores web con un total de 4 servidores detrás de un equilibrador de carga de Cisco ACE Appliance.

En este momento el problema es aleatorio, no podemos reproducir el problema a voluntad. Esta aplicación web ha estado funcionando correctamente durante los últimos siete meses.

Nos damos cuenta de que Microsoft no recomienda el uso de InProc con granjas de servidores web, incluso si se utilizan sesiones fijas.

Tenemos un entorno de laboratorio, razonablemente idéntico a nuestro entorno de producción, pero no podemos reproducirlo bajo una carga considerable (utilizamos WAPT).

En nuestro entorno de producción, hemos intentado aislar solo un servidor detrás del equilibrador de carga para eliminar el "salto del servidor" causado por el equilibrador de carga. El problema persiste, sin embargo, incluso cuando se ejecuta en un servidor. No vemos ningún reciclaje de AppPool o IIS en la producción. Como práctica estándar, reciclamos los grupos de aplicaciones de producción a diario a las 3 a.m. EST, y hemos disfrutado meses de disponibilidad en el sistema operativo.

Lo que se almacena en sesión es una amplia variedad de objetos, desde tipos simples (enteros y cadenas) hasta todo nuestro carrito de compras (un objeto gráfico complejo) e incluso una instancia de control de usuario (.ascx). Debido a la imposibilidad de serializar fácilmente muchos de estos objetos, no podemos pasar al almacenamiento fuera de proceso de la sesión en un período de tiempo razonable.

Alguien sugirió tratar de capturar una sesión HTTP usando Fiddler. El problema con la ejecución de Fiddler es que no podemos reproducir el problema de manera intencional. Por lo tanto, esto nos impide capturar una traza HTTP de un evento de falla a medida que ocurre. Los registros de seguimiento de WAPT en nuestro laboratorio probablemente proporcionarían los mismos datos que Fiddler, pero como dije, no podemos reproducirlo allí.

lo agradecería enormemente cualquier penetraciones cualquiera puede tener ...

+0

¿Tiene alguna información sobre qué datos de la sesión están dañados? ¿Son los carros de compras? ¿Es aleatorio? ¿Cómo sabes si no puedes reproducirlo? Y estoy seguro de que ya lo escuchó antes, por lo que podría sonar como un disco roto, es posible que desee hacer algo acerca de la necesidad de almacenar un gráfico de objetos completo de los carritos de compra de sus usuarios en sesión y el almacenamiento de un instancia de control de usuario también. – Sumo

+0

Sabemos que no podemos reproducirlo porque recibimos correos electrónicos con rastros de pila cuando sucede, coincidentes con las llamadas de los clientes. A menudo son valores aleatorios, pero uno en particular parece estar cayendo, que proviene de una propiedad compartida de solo lectura que envuelve el acceso a esta variable de sesión. Es bastante aleatorio, pero definitivamente sucede bajo carga porque mi gente de servicio al cliente no comienza a recibir quejas hasta después de que ha pasado un tiempo después de que se inicia el grupo de aplicaciones. Sí, sabemos que tenemos que sacar ese gráfico de objeto obsceno y el control del usuario de la sesión, pero esa solución está a unas semanas de distancia. :/ –

+0

¿Puedes publicar más detalles sobre esta variable compartida? – Sumo

Respuesta

1

Sobre la base de toda la información reunida aquí hasta ahora, voy a responder con una conjetura en cuanto a cuál es el problema.

La sesión probablemente expira de alguna manera.

El reciclaje del grupo de aplicaciones no es lo único que puede causar el vencimiento de una sesión. Y, como Hanselman will tell you, esto es una ocurrencia común cuando se combina la administración de la sesión InProc y el alto volumen.

Editar: Tome un vistazo a una older blog post for IIS6 que detalla la forma de determinar la causa de la pérdida de sesiones de este tipo, especialmente los que afectan a los usuarios específicos, no sólo a todas las sesiones, ya que esto puede suceder, también. La sección de interés está justo después del fragmento de código Application_End que habla de Web Gardens. He buscado una información más nueva similar a esta y todo lo que realmente pude encontrar que habló sobre todos los problemas fue un answer to another question here on SO.

Cuestiones relacionadas