Udostępnij za pośrednictwem


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-gcdumpprogramu :

  • 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 .gcdumps 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-gcdumppolecenia , 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-gcdumpProgram 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.