2009-11-05 9 views
5

Jest wielki presentation autorstwa Dana Farino, Chief Systems Architect, MySpace.com, prezentujący internetowe narzędzie do zrzucania stosów, które kataloguje wszystkie wątki uruchomione w danym procesie (co robią, jak długo mają był wykonywany, itp)Narzędzie do zrzutu stosu oparte na sieci Web dla ASP.NET przy użyciu Mdbg?

Ich techniki są również podsumowane na highscalability.com:

  • PerfCollector.
    Scentralizowane gromadzenie danych dotyczących wydajności za pośrednictwem interfejsu UDP . Bardziej niezawodny niż Windows i pozwala każdemu klientowi połączyć się i zobaczyć statystyki .
  • Narzędzie do zrzutu stosu oparte na sieci Web.
    Można kliknąć prawym przyciskiem myszy serwer powodujący problem i uzyskać zrzut stosu zarządzanych wątków .Net . Używany do RDC do systemu i dołączyć debugger i 1/2 później uzyskać odpowiedź. Powolny, nieusuwalny i żmudny. Nie tylko zrzut stosu daje wiele kontekstu o tym, co robi wątek. Rozwiązywanie problemów jest łatwiejsze, ponieważ użytkownik może zablokować 90 wątków w bazie danych , więc baza danych może być niedostępna.
  • Web Baza narzędzia do zrzutów sterty.
    Zrzuca wszystkie alokacje pamięci w liczbie . Bardzo przydatne dla programistów . Zaoszczędź wiele godzin robiąc to ręką o numerze . • Profiler. Śledzi od początku do końca żądanie i generuje raport . Zobacz adres URL, metody, stan, wszystko, co pomoże Ci zidentyfikować powolne żądanie. Wygląda na to, że zablokowane są luki w zgłoszeniach , wiele wyjątków jest zgłaszanych, wszystko, co może być interesujące. Bardzo lekki ciężar . Działa na jednym pudełku w każdym VIP (grupa 100 serwerów) w produkcji . Próbki 1 wątek co 10 sekund. Zawsze śledzenie w tle w .

Pytanie brzmi: jakie narzędzia są wymagane do zbudowania internetowego narzędzia do zrzucania stosów dla ASP.NET? Dla wygody załóżmy, że * .aspx hostowany w docelowej domenie AppDomain, zdolny do wysyłania wszystkich zarządzanych stosów wywołań w tym procesie, jest wystarczający.

Istnieje kilka stanowisk, które obejmują wykorzystanie Mdbg (debugger dla kodu zarządzanego w całości napisany w języku C#/IL który rozpoczął dostarczane z CLR 2 SDK) oraz zespół mdbgcore zwykle w C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ Bin:

Czy rozwiązanie po prostu odwołuje się do tego zespołu, aby uzyskać pożądany wynik?Jaki wpływ miałaby operacja "wykaz wszystkich zarządzanych stosów wywołań" na działający proces obsługujący ruch produkcyjny?

Odpowiedz

3

Wierzę, że profilowanie API .Net jest drogą do zrobienia.

Spójrz na projekt SlimTune w Google Code, aby mieć na żywo próbkę ze źródłami, dzięki której możesz sprawdzić, jak dostosować się i ulepszyć, aby działała w scenariuszu Asp.NET.

Pozdrowienia Massimo

2

Dzięki API profilowania .NET trzeba zatrzymać serwer i to zajmuje dużo CPU (ale to daje pełną kontrolę nad wszystkimi zwanych metod).

Myślę, że najbardziej "lekkim rozwiązaniem" jest zrobienie tego przy pomocy MDbg, połączyłem bardzo małą, ale użyteczną małą aplikację o nazwie StackDump, która wykonuje następujące czynności: 1) Debugger zatrzymuje aplikację i generuje listę wszystkie stosy CLR uruchomione dla tego procesu. 2) Aplikacja zostanie ponownie uruchomiona. Ta operacja jest szybką operacją i może (być może) zostać wykonana na działającym serwerze produkcyjnym przy niezmienionym kodzie produkcyjnym.

To tylko 80 linii kodu .Net do zarządzania tym. Opublikowałem source code na Codeplex.

Powiązane problemy