Narzędzie do analizy stert (dotnet-gcdump)
Ten artykuł dotyczy: ✔️ dotnet-gcdump
wersja 3.1.57502 lub nowsza
Instalowanie
Istnieją dwa sposoby pobierania i instalowania dotnet-gcdump
programu :
dotnet global tool:
Aby zainstalować najnowszą wersję
dotnet-gcdump
pakietu NuGet, użyj polecenia dotnet tool install :dotnet tool install --global dotnet-gcdump
Pobieranie bezpośrednie:
Pobierz plik wykonywalny narzędzia pasujący do platformy:
System operacyjny Platforma Windows x86 | x64 Arm | Arm64 | Linux x64 Arm | Arm64 | | musl-x64 musl-Arm64 |
Uwaga
Aby korzystać z dotnet-gcdump
aplikacji x86, potrzebujesz odpowiedniej wersji narzędzia x86.
Streszczenie
dotnet-gcdump [-h|--help] [--version] <command>
opis
Narzędzie dotnet-gcdump
globalne zbiera zrzuty GC (moduł odśmieceń pamięci) na żywo procesów platformy .NET przy użyciu funkcji EventPipe. Zrzuty GC są tworzone przez wyzwalanie GC w procesie docelowym, włączanie zdarzeń specjalnych i ponowne generowanie grafu korzeni obiektów ze strumienia zdarzeń. Ten proces umożliwia zbieranie zrzutów GC podczas uruchamiania procesu i z minimalnym obciążeniem. Te zrzuty są przydatne w kilku scenariuszach:
- Porównanie liczby obiektów na stercie w kilku punktach w czasie.
- Analizowanie katalogów głównych obiektów (odpowiadanie na pytania, takie jak "co nadal ma odwołanie do tego typu?").
- Zbieranie ogólnych statystyk dotyczących liczby obiektów na stercie.
Wyświetlanie zrzutu GC przechwyconego z pliku dotnet-gcdump
W systemie Windows .gcdump
pliki można wyświetlać w programie PerfView na potrzeby analizy lub w programie Visual Studio. Obecnie nie ma możliwości otwarcia elementu .gcdump
na platformach innych niż Windows.
Możesz zebrać wiele .gcdump
s i otworzyć je jednocześnie w programie Visual Studio, aby uzyskać środowisko porównania.
Opcje
--version
Wyświetla wersję
dotnet-gcdump
narzędzia.-h|--help
Pokazuje pomoc wiersza polecenia.
Polecenia
Polecenie |
---|
dotnet-gcdump collect |
dotnet-gcdump ps |
dotnet-gcdump report |
dotnet-gcdump collect
Zbiera zrzut GC z aktualnie uruchomionego procesu.
Ostrzeżenie
Aby przejść stertę GC, to polecenie wyzwala odzyskiwanie pamięci generacji 2 (pełne), które może zawiesić środowisko uruchomieniowe przez długi czas, zwłaszcza gdy sterta GC jest duża. Nie używaj tego polecenia w środowiskach wrażliwych na wydajność, gdy sterta GC jest duża.
Streszczenie
dotnet-gcdump collect [-h|--help] [-p|--process-id <pid>] [-o|--output <gcdump-file-path>] [-v|--verbose] [-t|--timeout <timeout>] [-n|--name <name>]
Opcje
-h|--help
Pokazuje pomoc wiersza polecenia.
-p|--process-id <pid>
Identyfikator procesu do zbierania zrzutu GC z.
-o|--output <gcdump-file-path>
Ścieżka, w której powinny zostać zapisane zebrane zrzuty GC. Wartość domyślna to .\YYYYMMDD_HHMMSS_<pid.gcdump>.
-v|--verbose
Wyprowadź dziennik podczas zbierania zrzutu GC.
-t|--timeout <timeout>
Zrezygnować z zbierania zrzutu GC, jeśli trwa dłużej niż to wiele sekund. Wartość domyślna to 30.
-n|--name <name>
Nazwa procesu zbierania zrzutu GC.
Uwaga
W systemach Linux i macOS to polecenie oczekuje aplikacji docelowej i dotnet-gcdump
będzie współużytkować tę samą TMPDIR
zmienną środowiskową. W przeciwnym razie upłynął limit czasu polecenia.
Uwaga
Aby zebrać zrzut GC przy użyciu dotnet-gcdump
polecenia , należy go uruchomić jako ten sam użytkownik, co użytkownik uruchamia proces docelowy lub jako główny. W przeciwnym razie narzędzie nie może nawiązać połączenia z procesem docelowym.
dotnet-gcdump ps
Wyświetla listę procesów dotnet, dla których można zbierać zrzuty GC. dotnet-gcdump 6.0.320703 i nowsze, wyświetla również argumenty wiersza polecenia, z którymi uruchomiono każdy proces, jeśli jest dostępny.
Streszczenie
dotnet-gcdump ps [-h|--help]
Przykład
Załóżmy, że uruchamiasz długotrwałą aplikację przy użyciu polecenia dotnet run --configuration Release
. W innym oknie uruchomisz dotnet-gcdump ps
polecenie . Dane wyjściowe, które zobaczysz, są następujące. Argumenty wiersza polecenia, jeśli istnieją, są wyświetlane przy użyciu dotnet-gcdump
wersji 6.0.320703 lub nowszej.
> dotnet-gcdump ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
dotnet-gcdump report <gcdump_filename>
Wygeneruj raport na podstawie wcześniej wygenerowanego zrzutu GC lub z uruchomionego procesu i zapisz w pliku stdout
.
Streszczenie
dotnet-gcdump report [-h|--help] [-p|--process-id <pid>] [-t|--report-type <HeapStat>]
Opcje
-h|--help
Pokazuje pomoc wiersza polecenia.
-p|--process-id <pid>
Identyfikator procesu do zbierania zrzutu GC z.
-t|--report-type <HeapStat>
Typ raportu do wygenerowania. Dostępne opcje: stosstat (wartość domyślna).
Rozwiązywanie problemów
Brak informacji o typie w gcdump.
Przed platformą .NET Core 3.1 wystąpił problem polegający na tym, że pamięć podręczna typu nie została wyczyszczone między elementami gcdumps podczas wywoływanej z użyciem klasy EventPipe. Spowodowało to, że zdarzenia potrzebne do określenia informacji o typie nie są wysyłane dla drugiego i kolejnych gcdumps. Naprawiono to w programie .NET Core 3.1-preview2.
Typy COM i statyczne nie są w zrzucie GC.
Przed platformą .NET Core 3.1 wystąpił problem polegający na tym, że typy statyczne i COM nie były wysyłane, gdy zrzut GC został wywołany za pośrednictwem elementu EventPipe. Naprawiono to w programie .NET Core 3.1.
dotnet-gcdump
Program nie może wygenerować.gcdump
pliku z powodu brakujących informacji, na przykład [Błąd] Wyjątek podczas polecenia gcdump: System.ApplicationException: plik ETL pokazuje początek zrzutu stert, ale nie jego ukończenie..gcdump
Lub plik nie zawiera całej sterty.dotnet-gcdump
program działa przez zebranie śladu zdarzeń emitowanych przez moduł odśmiecanie pamięci podczas indukowanego zbierania generacji 2. Jeśli sterta jest wystarczająco duża lub nie ma wystarczającej ilości pamięci do skalowania zdarzeń, zdarzenia wymagane do odtworzenia wykresu sterta ze śladu mogą zostać porzucone. W takim przypadku, aby zdiagnozować problemy ze stertą, zaleca się zebranie zrzutu procesu.dotnet-gcdump
wydaje się powodować problem z brakiem pamięci w środowisku ograniczonym pamięci.dotnet-gcdump
program działa przez zebranie śladu zdarzeń emitowanych przez moduł odśmiecanie pamięci podczas indukowanego zbierania generacji 2. Bufor zbierania zdarzeń jest własnością aplikacji docelowej i może wzrosnąć do 256 MB.dotnet-gcdump
sama używa również pamięci. Jeśli środowisko jest ograniczone pamięci, pamiętaj, aby uwzględnić te czynniki podczas zbierania gcdump, aby zapobiec błędom.