Udostępnij za pośrednictwem


Laboratorium 4.3 Analizowanie podstawowych plików zrzutu na innej maszynie — otwieranie podstawowych plików zrzutu za pomocą platformy Docker

Dotyczy: .NET Core 2.1, .NET Core 3.1, .NET 5

W tym artykule omówiono sposób otwierania podstawowego pliku zrzutu na maszynie wirtualnej z systemem Windows przy użyciu platformy Docker.

Wymagania wstępne

Aby ukończyć tę sekcję, należy skopiować co najmniej jeden plik zrzutu podstawowego na maszynie wirtualnej z systemem Windows w dowolnym folderze.

Cel tego laboratorium

Dowiesz się, jak otworzyć podstawowy plik zrzutu na innej maszynie wirtualnej z systemem Linux przy użyciu platformy Docker.

Informacje o kontenerach i platformie Docker

Zgodnie z oficjalną dokumentacją platformy Docker kontener jest standardową jednostką oprogramowania, która pakuje kod i wszystkie jego zależności, dzięki czemu aplikacja działa szybko i niezawodnie z jednego środowiska obliczeniowego do innego. Obraz kontenera platformy Docker to lekki, autonomiczny, wykonywalny pakiet oprogramowania zawierający wszystko, co jest wymagane do uruchomienia aplikacji: kod, środowisko uruchomieniowe, narzędzia systemowe, biblioteki systemowe i ustawienia.

Po prostu możesz użyć kontenerów platformy Docker do uruchamiania i wdrażania aplikacji. Kontenery platformy Docker można tworzyć z różnych obrazów systemu operacyjnego, takich jak Windows Core lub Ubuntu. W tym ćwiczeniu utworzysz kontener systemu Ubuntu w celu przeanalizowania podstawowego pliku zrzutu.

Aby utworzyć kontenery platformy Docker i używać ich na maszynie wirtualnej z systemem Windows, zainstaluj program Docker Desktop dla systemu Windows. W artykule połączonym wyjaśniono wymagania i kroki instalacji. Zgodnie z wymaganiami platforma Docker używa podsystemu Windows dla systemu Linux (WSL) dla kontenerów systemu Linux.

Uwaga 16.

Platforma Docker może uruchamiać zarówno kontenery systemu Windows, jak i Linux, ale nie w tym samym czasie. W związku z tym należy przełączyć się na kontenery systemu Linux.

Przed rozpoczęciem pracy zalecamy zapoznanie się z tym artykułem z często zadawanymi pytaniami dotyczącymi platformy Docker , aby zapoznać się z platformą Docker.

Tworzenie pliku dockerfile

Po zainstalowaniu aplikacji Docker Desktop w systemie Windows będzie potrzebny plik dockerfile. Plik dockerfile to po prostu zestaw instrukcji tworzenia kontenera. W nazwie pliku "dockerfile" jest rozróżniana wielkość liter i powinna być cała mała litera bez żadnego rozszerzenia nazwy pliku.

Polecenia można uruchamiać w kontenerze docelowym przy użyciu polecenia RUN . Na przykład plik dockerfile w tej sekcji pokazuje, że można użyć RUN mkdir /dumps polecenia do uruchomienia mkdir /dumps polecenia w docelowym systemie operacyjnym kontenera.

W tym przykładzie pokazano zawartość pliku dockerfile, która pozwala osiągnąć cel tej sekcji: Tworzenie kontenera ubuntu przy użyciu najnowszego obrazu systemu Ubuntu, instalowanie najnowszego zestawu SDK dotnet, aktualizowanie systemu operacyjnego, instalowanie narzędzi dotnet-dump i dotnet-symbol, kopiowanie i wyodrębnianie plików zrzutu oraz pobieranie wymaganych plików przy użyciu narzędzia dotnet-symbol na jednym z podstawowych plików zrzutu.

Uwaga 16.

Komentarze zaczynają się od znaku funta (#). Komentarze są udostępniane dla każdego wiersza, dzięki czemu można zrozumieć, co robi każde polecenie.

# Install the latest Ubuntu container image
FROM ubuntu:latest
 
# Install the latest dotnet SDK
FROM mcr.microsoft.com/dotnet/core/sdk:latest AS tools-install
 
# Update the OS, the slash (\) means that the command continues on the next line
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y
 
# Install the dotnet-dump and dotnet-symbol tools in the /dotnetcore-tools folder
RUN dotnet tool install --tool-path /dotnetcore-tools dotnet-dump
RUN dotnet tool install --tool-path /dotnetcore-tools dotnet-symbol
 
# Add the /dotnetcore-tools in the PATH environment variable to run the dotnet-dump and dotnet-symbol tools directly
ENV PATH="/dotnetcore-tools:${PATH}"
 
# Create a /dumps folder in the Linux container
RUN mkdir /dumps
 
# Copy the coredumps.tar.gz file from a Windows VM to the /dumps folder on a Linux VM
COPY ./coredumps.tar.gz /dumps/
 
# Extract the tar file to the /dumps folder
RUN tar -xf /dumps/coredumps.tar.gz -C /dumps
 
# Run dotnet-symbol against one of the core dump files to download the required files (such as symbols and DAC)
RUN dotnet-symbol --host-only --debugging ~/dumps/coredump.manual.1.11724 

Utwórz plik o nazwie dockerfile w tym samym katalogu, który zawiera plik archiwum coredumps.tar.gz . Pamiętaj: w nazwie pliku jest rozróżniana wielkość liter i nie ma rozszerzenia.

Kompilowanie i uruchamianie kontenera platformy Docker

Ponownie musisz przełączyć się do kontenerów systemu Linux na platformie Docker, jeśli jest uruchomiony kontener systemu Windows.

Zrzut ekranu przedstawiający menu przełączania systemu Linux.

Następnie otwórz okno wiersza polecenia i przejdź do folderu zawierającego plik coredumps.tar.gz i dockerfile. Aby skompilować kontener platformy Docker, uruchom polecenie docker build -t dotnettools ..

Uwaga 16.

Parametr -t oznacza "tag". Ta nazwa tagu będzie używana podczas uruchamiania kontenera platformy Docker.

Kropka (.) na końcu polecenia oznacza, że polecenie kompilacji platformy Docker będzie używać pliku dockerfile z bieżącego katalogu.

Oto dane wyjściowe polecenia kompilacji. Ponieważ to samo polecenie zostało uruchomione kilka razy, używa wewnętrznej pamięci podręcznej dla obrazu docelowego. Przy pierwszym uruchomieniu tego polecenia pobierze niezbędne pliki, a następnie buforuje je do późniejszego użycia w razie potrzeby. Po pierwszym uruchomieniu polecenia może upłynąć trochę czasu na skompilowanie obrazu.

Zrzut ekranu przedstawiający polecenie platformy Docker.

Następnie uruchom kontener przy użyciu docker container run -it dotnettools /bin/bash polecenia .

Zrzut ekranu przedstawiający polecenie kontenera platformy Docker.

To wszystko. Jesteś teraz wewnątrz nowo utworzonego kontenera systemu Linux. Reszta jest taka sama jak poprzednio: Otworzysz podstawowy zrzut przy użyciu tego samego polecenia dotnet-dump: dotnet-dump analyze /dumps/coredump.manual.1.11724. Oto wynik z przykładowego środowiska używanego do kompilowania serii szkoleniowej.

Zrzut ekranu przedstawiający polecenie dotnet dump.

Możesz uruchomić polecenia SOS, takie jak clrthreads, aby wyświetlić zarządzane wątki.

Zrzut ekranu polecenia clrthreads.

Teraz możesz analizować podstawowe pliki zrzutu w kontenerze systemu Linux przy użyciu platformy Docker.