Udostępnij za pośrednictwem


Zbieranie danych diagnostycznych w kontenerach

Te same narzędzia diagnostyczne, które są przydatne do diagnozowania problemów platformy .NET Core w innych scenariuszach, działają również w kontenerach platformy Docker. Jednak niektóre narzędzia wymagają specjalnych kroków do pracy w kontenerze. W tym artykule opisano, jak można używać narzędzi do zbierania śladów wydajności i zbierania zrzutów w kontenerach platformy Docker.

Korzystanie z narzędzi interfejsu wiersza polecenia platformy .NET w kontenerze

Te narzędzia mają zastosowanie do: ✔️ .NET Core 3.1 SDK i nowszych wersji

Globalne narzędzia diagnostyczne interfejsu wiersza polecenia platformy .NET Core (dotnet-counters, dotnet-dump, dotnet-gcdump, dotnet-monitor i dotnet-trace) są przeznaczone do pracy w wielu różnych środowiskach i powinny działać bezpośrednio w kontenerach platformy Docker. Z tego powodu te narzędzia są preferowaną metodą zbierania informacji diagnostycznych dla scenariuszy platformy .NET Core przeznaczonych dla platformy .NET Core 3.1 lub nowszego w kontenerach.

Te narzędzia można również zainstalować bez zestawu .NET SDK, pobierając warianty pojedynczego pliku z linków w poprzednim akapicie. Te instalacje wymagają globalnej instalacji środowiska uruchomieniowego .NET w wersji 3.1 lub nowszej, którą można uzyskać zgodnie z dowolną z określonych metod w dokumentacji instalacji platformy .NET lub korzystając z dowolnego z oficjalnych kontenerów środowiska uruchomieniowego.

Używanie globalnych narzędzi interfejsu wiersza polecenia platformy .NET Core w kontenerze przyczepki

Jeśli chcesz użyć globalnych narzędzi diagnostycznych interfejsu wiersza polecenia platformy .NET Core do diagnozowania procesów w innym kontenerze, pamiętaj o następujących dodatkowych wymaganiach:

  1. Kontenery muszą współużytkować przestrzeń nazw procesów (aby narzędzia w kontenerze przyczepki mogły uzyskiwać dostęp do procesów w kontenerze docelowym).
  2. Globalne narzędzia diagnostyczne interfejsu wiersza polecenia platformy .NET Core muszą mieć dostęp do plików zapisywanych w środowisku uruchomieniowym platformy .NET Core do katalogu /tmp, więc katalog /tmp musi być współużytkowany między kontenerem docelowym i przyczepki za pośrednictwem instalacji woluminu. Można to zrobić, na przykład przez udostępnienie przez kontenery wspólnego woluminu lub pustego woluminu KubernetesDir. Jeśli spróbujesz użyć narzędzi diagnostycznych z kontenera przyczepki bez udostępniania katalogu /tmp, zostanie wyświetlony błąd dotyczący procesu "nie uruchomiono zgodnego środowiska uruchomieniowego platformy .NET".

Używanie PerfCollect w kontenerze

To narzędzie dotyczy: ✔️ .NET Core 2.1 i nowszych wersji

Skrypt PerfCollect jest przydatny do zbierania śladów wydajności i jest zalecanym narzędziem do zbierania śladów przed programem .NET Core 3.0. W przypadku korzystania z PerfCollect kontenera należy pamiętać o następujących wymaganiach:

  • PerfCollect wymaga dodatkowych możliwości uruchamiania perf narzędzia. Minimalny wymagany zestaw możliwości to PERFMON i SYS_PTRACE. Niektóre środowiska wymagają .SYS_ADMIN Pamiętaj, aby uruchomić kontener z wymaganymi możliwościami. Jeśli zestaw minimalny nie działa, spróbuj użyć pełnego zestawu.

  • PerfCollect wymaga ustawienia pewnych zmiennych środowiskowych przed rozpoczęciem profilowania aplikacji. Można je ustawić w pliku Dockerfile lub podczas uruchamiania kontenera. Ponieważ te zmienne nie powinny być ustawiane w normalnych środowiskach produkcyjnych, często należy je dodawać podczas uruchamiania kontenera, który zostanie profilowany. Dwie zmienne wymagane przez narzędzie PerfCollect to:

    • DOTNET_PerfMapEnabled=1
    • DOTNET_EnableEventLog=1

Uwaga

Podczas wykonywania aplikacji przy użyciu platformy .NET 7 należy również ustawić DOTNET_EnableWriteXorExecute=0 oprócz powyższych zmiennych środowiskowych.

Uwaga

Program .NET 6 standardizuje prefiks DOTNET_ zamiast COMPlus_ zmiennych środowiskowych, które konfigurują zachowanie czasu wykonywania platformy .NET. COMPlus_ Jednak prefiks będzie nadal działać. Jeśli używasz poprzedniej wersji środowiska uruchomieniowego platformy .NET, nadal należy użyć prefiksu COMPlus_ dla zmiennych środowiskowych.

Używanie PerfCollect w kontenerze przyczepki

Jeśli chcesz uruchomić w PerfCollect jednym kontenerze w celu profilowania procesu platformy .NET Core w innym kontenerze, środowisko jest prawie takie samo, z wyjątkiem tych różnic:

  • Zmienne środowiskowe wymienione wcześniej (DOTNET_PerfMapEnabled i DOTNET_EnableEventLog) muszą być ustawione dla kontenera docelowego (a nie dla uruchomionego PerfCollect).
  • Uruchomiony kontener PerfCollect musi mieć SYS_ADMIN możliwość (a nie kontener docelowy).
  • Dwa kontenery muszą współużytkować przestrzeń nazw procesu.