Zine.net online

Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc
w Szukaj

mgrzeg.net - Admin on Rails :)

Przyspieszacze analizy dumpów aplikacji .NET

W ramach pakietu dystrybucyjnego .NET Framework do systemu trafia biblioteka SOS.DLL, która pozwala analizować kod .NET w WinDbg. Na tym blogu promuję jednak użycie biblioteki psscor4 (i wcześniejszej psscor2) do analizy dumpów (a także debuggowania aktywnych procesów), co wiąże się głównie z tym, że biblioteka ta jest niezależna od konkretnej wersji CLR (a konkretniej biblioteki mscordacwks.dll), w ramach której uruchomiony był proces. Do tego dochodzi fakt, że psscor zawiera wszystkie te rozszerzenia, które dostępne są w standardowym sos, a także wiele innych.

Jednym z takich rozszerzeń, których nie ma w son of strike, a jest natomiast w psscor, jest !Analysis. To całkiem przydatne rozszerzenie, które generuje zestaw logów dla kilku najczęściej powtarzanych podczas praktycznie każdej analizy poleceń, a dokładniej:

!dumpallexceptions -> zrzuca wszystkie wyjątki ze sterty zarządzanej
~*E !CLRSTACK -> dla każdego wątku wykonuje polecenie !clrstack, czyli zrzut zarządzanego stosu wywołań
!DUMPDOMAIN -> zrzuca wszystkie AppDomains i Assemblies
!DUMPHEAP -STAT -> zrzuca statystykę pamięci zarządzanej: typy obiektów, ilość oraz całkowity rozmiar pamięci zajmowanej przez dany typ
~*E !DUMPSTACK -> dla każdego wątku zrzuca stos wywołań (zawiera elementy stosu natywnego)
!EEHEAP -> zrzuca podstawowe informacje dotyczącego zarządzanej sterty
!EESTACK -> jeszcze raz stos zarządzany i niezarządzany
!FINALIZEQUEUE -> zrzuca elementy kolejki finalizacyjnej (obiektów oczekujących na finalizację)
!FINALIZEQUEUE -DETAIL -> to co wyżej, ze szczegółami
!heap 0 0 -> zrzut sterty niezarządzanej.
.dumpdebug -> informacje o dumpie - wątki, moduły
lmv -> zrzut szczegółowych informacji o każdym załadowanym module
!OBJSIZE -> zrzut wszystkich zarządzanych obiektów dla wszystkich wątków wraz z podstawowymi informacjami (typ, rozmiar, dowiązanie)
~*kb 200 -> dla każdego wątku natywnego zrzut do 200 elementów wraz z 3 przekazanymi argumentami
!SYNCBLK -> zrzut blokad zarządzanych (!locks dla natywnych)
!SYNCBLK -ALL -> blokady ze szczegółami
!THREADPOOL -> zrzut pool wątków
!threads -> zrzut wszystkich zarządzanych wątków, wraz z podstawowymi informacjami
~ -> lista wszystkich natywnych wątków

Wynik każdego z poleceń trafia do WinDbg, a także do osobnych plików w podkatalogu analysis, dla przykładu:

CLRDUMP_ALLEXCEPTIONS_2012-07-10_15-28-03-967.log
CLRDUMP_CLRSTACK_2012-07-10_15-28-03-187.log
CLRDUMP_CRITLIST_2012-07-10_15-28-03-546.log
CLRDUMP_DUMPDOMAIN_2012-07-10_15-28-03-593.log
CLRDUMP_DUMPHEAPSTAT_2012-07-10_15-28-03-920.log
CLRDUMP_DUMPSTACK_2012-07-10_15-28-03-234.log
CLRDUMP_EEHEAP_2012-07-10_15-28-03-905.log
CLRDUMP_EESTACK_2012-07-10_15-28-03-374.log
CLRDUMP_FINALIZEQUEUEDETAIL_2012-07-10_15-28-03-905.log
CLRDUMP_FINALIZEQUEUE_2012-07-10_15-28-03-905.log
CLRDUMP_HEAPSTATS_2012-07-10_15-28-04-248.log
CLRDUMP_HEAP_2012-07-10_15-28-03-608.log
CLRDUMP_INIT_2012-07-10_15-28-03-000.log
CLRDUMP_LMV_2012-07-10_15-28-03-546.log
CLRDUMP_OBJSIZE_2012-07-10_15-28-03-983.log
CLRDUMP_STARKB200_2012-07-10_15-28-03-047.log
CLRDUMP_SYNCBLKALL_2012-07-10_15-28-03-499.log
CLRDUMP_SYNCBLK_2012-07-10_15-28-03-499.log
CLRDUMP_THREADPOOL_2012-07-10_15-28-03-047.log
CLRDUMP_THREADS_2012-07-10_15-28-03-047.log
CLRDUMP_TILDE_2012-07-10_15-28-03-031.log

Taki zestaw logów, zamiast samego dumpa można bez problemu podesłać komuś do analizy - oszczędność miejsca, gwarancja bezpieczeństwa (nie wysyłamy informacji wrażliwych, które mogą znajdować się w dumpie), no i do wykonania nawet przez kogoś niewprawionego w analizie - same plusy :)

Opublikowane 15 lipca 2012 20:16 przez mgrzeg
Filed under: , ,

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

 

dotnetomaniak.pl said:

Dziękujemy za dodanie artykułu - Trackback z dotnetomaniak.pl

lipca 17, 2012 07:32

Co o tym myślisz?

(wymagane) 
(opcjonalne)
(wymagane) 

  
Wprowadź kod: (wymagane)
Wyślij

Subskrypcje

W oparciu o Community Server (Personal Edition), Telligent Systems