Zbieranie danych diagnostycznych w kontenerach
Te same narzędzia diagnostyczne, które są przydatne do diagnozowania problemów platformy .NET 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 (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 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 w kontenerze przyczepki
Jeśli chcesz użyć globalnych narzędzi diagnostycznych interfejsu wiersza polecenia platformy .NET do diagnozowania procesów w innym kontenerze, pamiętaj o następujących dodatkowych wymaganiach:
- 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).
- Globalne narzędzia diagnostyczne interfejsu wiersza polecenia platformy .NET muszą mieć dostęp do plików zapisywanych w 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 uruchamianiaperf
narzędzia. Minimalny wymagany zestaw możliwości toPERFMON
iSYS_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, aby profilować proces platformy .NET w innym kontenerze, środowisko jest prawie takie samo. Różnice są następujące:
- Zmienne środowiskowe wymienione wcześniej (
DOTNET_PerfMapEnabled
iDOTNET_EnableEventLog
) muszą być ustawione dla kontenera docelowego (a nie dla uruchomionegoPerfCollect
). - Uruchomiony kontener
PerfCollect
musi miećSYS_ADMIN
możliwość (a nie kontener docelowy). - Dwa kontenery muszą współużytkować przestrzeń nazw procesu.