2009-11-05 9 views
5

C'è un ottimo presentation di Dan Farino, Chief Systems Architect allo MySpace.com, che mostra uno strumento di dumping stack basato sul Web che cataloga tutti i thread in esecuzione in un dato processo (cosa stanno facendo, quanto tempo hanno stato di esecuzione, ecc)Strumento di dump di stack basato sul Web per ASP.NET che utilizza Mdbg?

Le loro tecniche sono riassunte sul highscalability.com:

  • PerfCollector.
    Centralizzata raccolta di dati sulle prestazioni tramite UDP. Più affidabile di Windows e stats consente a qualsiasi client di connettersi e vedere statistiche.
  • Strumento Dump di stack basato sul Web.
    È possibile fare clic con il pulsante destro del mouse su un server problematico e ottenere il dump dello stack dei thread gestiti .Net . Utilizzato per avere RDC nel sistema e collegare un debugger e 1/2 in seguito ottenere una risposta. Lento, non scalabile e noioso. Non solo uno stack dump , fornisce un sacco di contesto su ciò che il thread sta facendo. La risoluzione dei problemi è più semplice perché è possibile vedere 90 thread bloccati su un database in modo che il database possa essere inattivo.
  • Strumento dump di heap di base Web.
    Scarica tutte le allocazioni di memoria . Molto utile per gli sviluppatori . Risparmia ore di lavoro con la mano . • Profiler. Traccia una richiesta dall'inizio alla fine e produce un rapporto . Vedi URL, metodi, stato, tutto ciò che ti aiuterà identificare una richiesta lenta. Guarda le convinzioni del blocco , ci sono un sacco di eccezioni generate, qualsiasi cosa che potrebbe essere interessante. Peso molto leggero . È in esecuzione su una casella in ogni VIP (gruppo di 100 server) nella produzione . Campioni 1 thread ogni 10 secondi. Tracciamento sempre nello sfondo .

La domanda è: quali strumenti sono necessari per creare uno stack dump tool basato su Web per ASP.NET? Per comodità, supponiamo che un * .aspx ospitato nell'AppDomain di destinazione, in grado di generare tutti gli stack di chiamate gestite in quel processo, sia sufficiente.

ci sono alcuni post che riguardano l'uso di MDBG (debugger per il codice gestito scritto interamente in C#/IL che ha iniziato la spedizione con CLR 2 SDK) e il gruppo mdbgcore in genere si trovano in C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bin:

Una soluzione farebbe semplicemente riferimento a questo assieme per produrre l'uscita desiderata?Quale impatto avrebbe una "lista di tutti gli stack di chiamate gestite" sul processo in esecuzione che serve al traffico di produzione?

risposta

3

Credo che l'API di profilazione di .Net sia la strada da percorrere.

Guarda il progetto SlimTune su Google Code per avere un campione dal vivo, con le fonti, che puoi verificare come adattarti e migliorare per lavorare in uno scenario Asp.NET.

saluti Massimo

2

Con l'API di profiling di Net si deve fermare il server e ci vuole un sacco di CPU (ma ti dà il pieno controllo su tutti i metodi chiamati).

Penso che la soluzione più “modo leggero” è quello di fare questo con MDBG, ho messo insieme un piccolo ma utile piccola applicazione chiamata StackDump che fa la seguente: 1) il debugger si interrompe l'applicazione e genera un elenco di tutti gli stack CLR in esecuzione per il processo. 2) L'applicazione viene riavviata. Questa operazione è un'operazione rapida e può (forse) essere eseguita su un server di produzione in esecuzione con codice di produzione invariato.

Solo 80 righe di codice .Net per gestirlo. Ho pubblicato lo source code su Codeplex.

Problemi correlati