2010-12-11 22 views
6

Nuestro sitio web está en .NET pero también contiene algunas antiguas bibliotecas ASP y 32bits. Había estado funcionando bien por un tiempo (2 años). Pero durante el último mes, hemos visto el siguiente error en nuestro servidor IIS7, que no hemos podido rastrear y corregir:IIS7: aplicación de error w3wp.exe, ¿cuál es la causa raíz de estos bloqueos?

"Aplicación de error w3wp.exe, versión 7.0.6001.18000, marca de tiempo 0x47919413, módulo de fallas kernel32.dll, versión 6.0.6001.18215, marca de tiempo 0x4995344f, código de excepción 0xe053534f, error de desplazamiento 0x0002f328, id de proceso 0x% 9, tiempo de inicio de la aplicación 0x% 10. "

que son capaces de reproducir el error:

  • Una de nuestras páginas .aspx que empiece a cargarse, el código y ejecutar consultas (tenemos Response.Flush() por toda la página a la pista en la que se rompe el código), luego se detiene de repente y obtenemos el error anterior en IIS.

  • La página se detiene la carga y, sin la Response.Flush(), no es volver a dirigir a nuestra página error.aspx (como se configura en web.config)

  • el error no sucede todo el tiempo. A veces, ocurre 3 veces seguidas, luego funciona bien durante 15 minutos sin parar con una redirección adecuada a error.aspx.

  • El error que obtenemos entonces es un clásico: "O bien BOF o EOF es verdadero o el registro actual se ha eliminado".

  • Cuando se produce el error, la página se cuelga y todas las demás sesiones en la misma computadora desde cualquier navegador tienen páginas web colgadas (por cierto, solo permitimos 1 proceso de trabajo mientras estamos probando). Desde otras computadoras, el sitio carga bien.

  • Puedo reciclar el grupo de aplicaciones, matar w3wp.exe, reiniciar IIS. Nada servirá. La única forma de volver a cargar correctamente la página es reiniciar MS SQL que maneja nuestros estados de sesión. No sé por qué ocurre esto, pero supusimos que las cookies de sesión en los navegadores de los usuarios apuntan a un hilo que no finalizó correctamente (debido al bloqueo anterior) e IIS está esperando que termine para procesar más código (?) Si alguien puede explicar esto mejor, sería realmente útil. ¿Hay un tiempo de espera que podemos configurar para "terminar" los hilos? ¿Es un problema relacionado con MS SQL?

También he mirado a los usos de memoria privadas y virtuales, porque creo que nuestro código no es el más eficaz y estoy seguro de que hemos pérdidas de memoria restante. Sin embargo, vi que la página se bloqueaba a pesar de que tanto las memorias privadas como las virtuales todavía eran bastante bajas (menos de 100 MB cada una).

He usado Debug Diag y WinDbg como se indica aquí: http://blogs.msdn.com/b/tess/archive/2009/03/20/debugging-a-net-crash-with-rules-in-debug-diag.aspx, pero no podemos hacer que funcione windbg, esto es lo que estamos tratando de hacer en este momento.

Si alguien nos puede ayudar o apuntar hacia la dirección correcta, sería realmente genial, gracias.

+0

será mejor que decir claramente qué tema WinDBG se conocieron. –

Respuesta

0

Es muy posible que uno de los ensambles referenciados/vinculados en algún lugar se haya dañado al azar (puede suceder) en el disco. ¿Puedes intentar replicar el problema en una máquina nueva y limpia con las mismas estadísticas, nuevas instalaciones de los últimos controladores xyz que estás usando?

Resolví un misterioso problema que me tomó meses aislar de esta manera.Parecía limpio, las nuevas máquinas con las mismas especificaciones y los controladores requeridos funcionarían muy bien: solo algunas máquinas antiguas con las mismas especificaciones fallaban constantemente. Terminé desinstalando todo (IIS, ASP.NET, .NET, base de datos y cliente) y comenzando desde cero. La causa final cuando lo aislé fue que el controlador del cliente db estaba corrupto en las máquinas más antiguas (y todas las máquinas más antiguas eran clones entre sí, así que supongo que fueron clonadas después de que ocurriera la corrupción), y parecía ser meterse con el espacio de memoria .NET incluso cuando no estaba llamando directamente. Todavía tengo que responder a mi publicación "help me debug this monster" con esta respuesta porque dudaba que alguna vez pudiera ayudar a nadie.

+0

Muchas gracias Mike. Tenemos 3 implementaciones en 3 sitios diferentes con servidores proporcionados por diferentes proveedores de host. Todos se estrellan. Hemos comprado un nuevo servidor, volvimos a instalar todo desde cero y se bloqueó de la misma manera. Sin embargo, como sugirió, me pregunto si nuestro controlador MS SQL o mySQL podría estar dañado. ¿También intentaste usar DebugDiag/Windbg para identificar de dónde viene el problema? – yorrser

2

"O bien BOF o EOF es Verdadero, o el registro actual se ha eliminado" significa que la tabla está vacía y usted está intentando hacer un MoveNext. Por lo tanto, compruebe si hay algún movimiento antes de realizar.

IIS es notorio por arrojar errores de núcleo en w3wp.exe como este. Todos sus errores en el estado de la sesión son solo síntomas del proceso bloqueado. Múltiples grupos de aplicaciones no servirán de mucho; simplemente difunden el error.

Apuesto a que es un bloqueo de SQL debido al cambio en el entorno de usuario. Esto causará un retraso de 10 segundos ya que SQL intenta determinar qué consulta eliminar. Uno gana, uno pierde. El perdedor obtiene un puntero a una mesa inesperadamente vacía y usted intenta un movimiento y un colapso posterior. Tal vez podría apuntar su base de datos a una conexión ODBC y activar el rastreo, o encontrar la manera de hacer que SQL inicie sesión.

Tenía todos los mismos síntomas que los anteriores en Perl. Pude crear un wrapper fn() para hacer todas las consultas SQL y registrar todos los sql, + params y cualquier error en el disco para rastrear el problema. Fueron interbloqueos, luego pudimos codificar en reintentos automáticos y, finalmente, recodificamos el orden de las consultas y las columnas escaneadas para eliminar los interbloqueos.

0

Comenzamos a recibir este error después de instalar las actualizaciones de Windows en una máquina con Windows Server 2008R2. Windows Process Activation Service (WAS) instala algunos enlaces de sitios adicionales que causaron problemas para nuestra configuración.

Eliminamos los enlaces net.tcp, net.pipe, net.msmq y msmq.formatname de nuestro sitio web y ya no tenemos la excepción de la aplicación de fallas.

0

Esto es probablemente un caso extremo, pero por si alguien viene aquí y están usando MVCMailer, estaba obteniendo el mismo error debido al método .SendAsync() en los anuncios publicitarios.

Los cambié todos a .Send() y se detuvo el bloqueo.

Ver this SO answer formas de utilizar el programa de correo asincrónico y evitar el accidente (supuestamente, yo personalmente no ponerlo en práctica)

Cuestiones relacionadas