2009-11-05 16 views
5

Hay un gran presentation por Dan Farino, Arquitecto jefe de sistemas en MySpace.com, que muestra una herramienta de volcado de pila basada en la web que cataloga todos los hilos que se ejecutan en un proceso determinado (qué están haciendo, cuánto tiempo han sido ejecutor, etc.)Herramienta de volcado de pila basada en web para ASP.NET con Mdbg?

Sus técnicas también se resumen en highscalability.com:

  • PerfCollector.
    Centralizada recopilación de datos de rendimiento a través de UDP. Más confiable que Windows y permite que cualquier cliente se conecte y vea las estadísticas .
  • Herramienta de volcado de pila basada en la web.
    Puede hacer clic con el botón derecho en el servidor problemático y obtener el volcado de pila de los hilos gestionados de .NET . Solía ​​tener que RDC en el sistema y adjuntar un depurador y 1/2 más tarde obtener una respuesta. Lento, inasible y tedioso. No solo un volcado de pila , da mucho contexto sobre lo que está haciendo el hilo. La solución de problemas es más fácil porque puede ver que 90 hilos están bloqueados en una base de datos , por lo que la base de datos puede estar fuera de servicio.
  • Base de web Heap Dump Tool.
    Vaciado de todas las asignaciones de memoria . Muy útil para desarrolladores de . Ahorre horas de hacerlo por mano. • Profiler. Rastrea una solicitud de principio a fin y genera un informe . Consulte URL, métodos, estado, todo lo que le ayudará identificar una solicitud lenta. Mira contenciones de bloqueo, hay un montón de excepciones lanzadas, cualquier cosa que pueda ser interesante. Muy ligero peso. Se ejecuta en una caja en cada VIP (grupo de 100 servidores) en la producción . Muestras 1 hilo cada 10 segundos. Siempre rastreando en el fondo .

La pregunta es: ¿qué herramientas se necesitan para construir una herramienta de volcado de pila basada en web para ASP.NET? Para su conveniencia, supongamos que un * .aspx alojado en el AppDomain de destino, capaz de generar todas las pilas de llamadas administradas en ese proceso, es suficiente.

Hay algunos mensajes que cubren el uso de MDBG (depurador de código administrado escrito completamente en C#/IL que se inició el envío con el CLR 2 SDK) y el conjunto mdbgcore que típicamente se encuentran en C: \ Archivos de programa \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bin:

¿Una solución simplemente haría referencia a este conjunto para producir la salida deseada?¿Qué impacto tendría una operación de "enumerar todas las pilas de llamadas administradas" en el proceso en curso que está dando servicio al tráfico de producción?

Respuesta

3

Creo que la API de perfiles de .Net es el camino a seguir.

Mire el proyecto SlimTune en Google Code para tener una muestra en vivo, con fuentes, que puede verificar cómo adaptarse y mejorar para trabajar en un escenario Asp.NET.

Saludos Massimo

2

Con la API de perfiles de .Net usted tiene que parar el servidor y se necesita una gran cantidad de CPU (pero le da un control total sobre todos los llamados métodos).

creo que la solución más “camino de luz” es hacer esto con MDBG, que arme una muy pequeña pero útil pequeña aplicación llamada StackDump que hace lo siguiente: 1) El depurador se detiene la aplicación y genera una lista de todas las pilas CLR se ejecutan para el proceso. 2) La aplicación se inicia de nuevo. Esta operación es una operación rápida y puede (tal vez) ejecutarse en un servidor de producción en ejecución con un código de producción sin cambios.

Es solo 80 líneas de código .NET para gestionar esto. Publiqué el source code en Codeplex.

Cuestiones relacionadas