Jakie narzędzia diagnostyczne są dostępne na platformie .NET Core?
Oprogramowanie nie zawsze zachowuje się zgodnie z oczekiwaniami, ale platforma .NET Core ma narzędzia i interfejsy API, które ułatwiają szybkie i skuteczne diagnozowanie tych problemów.
Ten artykuł ułatwia znalezienie różnych potrzebnych narzędzi.
Debugery
Debugery umożliwiają interakcję z programem. Wstrzymanie, przyrostowe wykonywanie, badanie i wznawianie zapewnia wgląd w zachowanie kodu. Debuger to dobry wybór do diagnozowania problemów funkcjonalnych, które można łatwo odtworzyć.
Testowanie jednostek
Testowanie jednostkowe to kluczowy składnik ciągłej integracji i wdrażania wysokiej jakości oprogramowania. Testy jednostkowe zostały zaprojektowane tak, aby zapewnić wczesne ostrzeżenie podczas przerywania czegoś.
Instrumentacja w celu obserwowania
Platforma .NET obsługuje standardowe techniki instrumentacji w branży przy użyciu metryk, dzienników i rozproszonych śladów. Instrumentacja to kod dodawany do projektu oprogramowania w celu zarejestrowania tego, co robi. Te informacje można następnie zbierać w plikach, bazach danych lub w pamięci i analizować w celu zrozumienia sposobu działania programu programowego. Jest to często używane w środowiskach produkcyjnych do monitorowania problemów i diagnozowania ich. Środowisko uruchomieniowe platformy .NET ma wbudowaną instrumentację, którą można opcjonalnie włączyć i interfejsy API, które umożliwiają dodawanie niestandardowej instrumentacji wyspecjalizowanej dla aplikacji.
Metryki
Metryki to pomiary liczbowe rejestrowane w czasie w celu monitorowania wydajności i kondycji aplikacji. Metryki są często używane do generowania alertów w przypadku wykrycia potencjalnych problemów. Metryki mają bardzo niską wydajność i wiele usług konfiguruje je jako zawsze włączone dane telemetryczne.
Dzienniki
Rejestrowanie to technika, w której kod jest instrumentowany do tworzenia dziennika, rekord interesujących zdarzeń, które wystąpiły podczas uruchamiania programu. Często zestaw zdarzeń dziennika jest konfigurowany domyślnie i bardziej rozbudowane rejestrowanie można włączyć na żądanie, aby zdiagnozować konkretne problemy. Obciążenie wydajności jest zmienne w zależności od ilości rejestrowanych danych.
Rozproszone ślady
Śledzenie rozproszone to wyspecjalizowana forma rejestrowania, która ułatwia lokalizowanie błędów i problemów z wydajnością w aplikacjach rozproszonych na wielu maszynach lub procesach. Ta technika śledzi żądania przez aplikację korelując razem pracę wykonywaną przez różne składniki aplikacji i oddzielając ją od innej pracy, którą aplikacja może wykonywać dla współbieżnych żądań. Istnieje możliwość śledzenia każdego żądania i próbkowania można opcjonalnie stosować w celu ograniczenia obciążenia związanego z wydajnością.
Zrzuty
Zrzut to plik zawierający migawkę procesu podczas tworzenia. Mogą one być przydatne do badania stanu aplikacji na potrzeby debugowania.
Symbole
Symbole to mapowanie między kodem źródłowym a plikiem binarnym utworzonym przez kompilator. Są one często używane przez debugery platformy .NET do rozpoznawania numerów wierszy źródłowych, nazw zmiennych lokalnych i innych typów informacji diagnostycznych.
Zbieranie danych diagnostycznych w kontenerach
Te same narzędzia diagnostyczne, które są używane w niekontenerowanych środowiskach systemu Linux, mogą być również używane do zbierania diagnostyki w kontenerach. Wystarczy kilka zmian użycia, aby upewnić się, że narzędzia działają w kontenerze platformy Docker.
Narzędzia globalne diagnostyki platformy .NET Core
dotnet-counters
dotnet-counters to narzędzie do monitorowania wydajności na potrzeby monitorowania kondycji pierwszego poziomu i badania wydajności. Obserwuje ona wartości liczników wydajności opublikowane za pośrednictwem interfejsu EventCounter API. Na przykład możesz szybko monitorować elementy, takie jak użycie procesora CPU lub szybkość wyjątków zgłaszanych w aplikacji platformy .NET Core.
dotnet-dump
Narzędzie dotnet-dump to sposób zbierania i analizowania zrzutów podstawowych Windows i Linux bez natywnego debugera.
dotnet-gcdump
Narzędzie dotnet-gcdump to sposób zbierania zrzutów GC (modułu odśmiecenia pamięci) na żywo procesów platformy .NET.
dotnet-trace
Platforma .NET Core zawiera elementy nazywane EventPipe
danymi diagnostycznymi, za pomocą których są uwidocznione dane diagnostyczne. Narzędzie dotnet-trace umożliwia korzystanie z interesujących danych profilowania z aplikacji, które mogą pomóc w scenariuszach, w których konieczne jest spowolnienie działania aplikacji.
dotnet-stack
Narzędzie dotnet-stack umożliwia szybkie drukowanie zarządzanych stosów dla wszystkich wątków w uruchomionym procesie platformy .NET.
dotnet-symbol
dotnet-symbol pobiera pliki (symbole, DAC/DBI, pliki hosta itp.) potrzebne do otwarcia podstawowego zrzutu lub minidump. Użyj tego narzędzia, jeśli potrzebujesz symboli i modułów, aby debugować plik zrzutu przechwycony na innej maszynie.
dotnet-sos
dotnet-sos instaluje rozszerzenie debugowania SOS w systemach Linux i macOS (i na Windows, jeśli używasz narzędzia Windbg/cdb).
PerfCollect
PerfCollect to skrypt powłoki bash, którego można użyć do zbierania śladów za pomocą perf
polecenia i LTTng
do bardziej szczegółowej analizy wydajności aplikacji platformy .NET działających w dystrybucjach systemu Linux.
Samouczki dotyczące diagnostyki platformy .NET Core
Pisanie własnego narzędzia diagnostycznego
Biblioteka klienta diagnostyki umożliwia pisanie własnego niestandardowego narzędzia diagnostycznego najlepiej dopasowanego do scenariusza diagnostycznego. Wyszukaj informacje w dokumentacji interfejsu API klienta Microsoft.Diagnostics.NETCore.Client.
Debugowanie przecieku pamięci
Samouczek: debugowanie przecieku pamięci przeprowadzi cię przez znalezienie przecieku pamięci. Narzędzie dotnet-counters służy do potwierdzania wycieku, a narzędzie dotnet-dump służy do diagnozowania wycieku.
Debugowanie wysokiego użycia procesora
Samouczek: debugowanie wysokiego użycia procesora CPU przeprowadzi Cię przez badanie wysokiego użycia procesora CPU. Używa narzędzia dotnet-counters w celu potwierdzenia wysokiego użycia procesora CPU. Następnie przeprowadzi Cię przez proces używania funkcji Trace for performance analysis utility (dotnet-trace
) lub Linux perf
do zbierania i wyświetlania profilu użycia procesora CPU.
Debugowanie zakleszczenia
Samouczek: debugowanie zakleszczenia pokazuje, jak za pomocą narzędzia dotnet-dump zbadać wątki i blokady.
Debugowanie funkcji ThreadPool Starvation
Samouczek: debugowanie głodu puli wątków pokazuje, jak używać narzędzi dotnet-counters i dotnet-stack w celu zbadania głodu ThreadPool.
Debugowanie witryny StackOverflow
Samouczek: debugowanie rozwiązania StackOverflow pokazuje, jak debugować element StackOverflowException w systemie Linux.
Debugowanie zrzutów systemu Linux
Debugowanie zrzutów systemu Linux wyjaśnia, jak zbierać i analizować zrzuty w systemie Linux.
Mierzenie wydajności przy użyciu usługi EventCounters
Samouczek: mierzenie wydajności przy użyciu usługi EventCounters na platformie .NET pokazuje, jak używać interfejsu EventCounter API do mierzenia wydajności w aplikacji platformy .NET.