Diagnosztikák gyűjtése tárolókban

Ugyanazok a diagnosztikai eszközök is működnek a Docker-tárolókban, amelyek hasznosak a .NET Core-problémák diagnosztizálásában más forgatókönyvekben. Egyes eszközök azonban speciális lépéseket igényelnek a tárolókban való munkavégzéshez. Ez a cikk bemutatja, hogyan használhatók a teljesítménykövetések gyűjtésére és a memóriaképek gyűjtésére szolgáló eszközök a Docker-tárolókban.

.NET CLI-eszközök használata tárolóban

Ezek az eszközök a következőkre vonatkoznak: ✔️ .NET Core 3.1 SDK és újabb verziók

A .NET Core globális CLI diagnosztikai eszközei (dotnet-counters, dotnet-dump, dotnet-gcdump, dotnet-monitor és dotnet-trace) úgy vannak kialakítva, hogy sokféle környezetben működjenek, és mindennek közvetlenül Docker-tárolókban kell működnie. Emiatt ezek az eszközök a .NET Core 3.1-et vagy újabb verzióit tárolókban célzó .NET Core-forgatókönyvek diagnosztikai információinak gyűjtésének előnyben részesített módszerei.

Ezeket az eszközöket a .NET SDK nélkül is telepítheti, ha letölti az egyfájlos változatokat az előző bekezdés hivatkozásaiból. Ezekhez a telepítésekhez a .NET-futtatókörnyezet 3.1-es vagy újabb verziójának globális telepítése szükséges, amelyet a .NET telepítési dokumentációjában vagy a hivatalos futtatókörnyezeti tárolók bármelyikének használatával szerezhet be.

A .NET Core globális CLI-eszközeinek használata egy oldalkocsis tárolóban

Ha a .NET Core globális CLI diagnosztikai eszközeit szeretné használni egy másik tároló folyamatainak diagnosztizálásához, vegye figyelembe az alábbi további követelményeket:

  1. A tárolóknak meg kell osztaniuk egy folyamatnévteret (hogy az oldalkocsi tárolóban lévő eszközök hozzáférhessenek a céltároló folyamataihoz).
  2. A .NET Core globális parancssori felület diagnosztikai eszközeinek hozzáféréssel kell rendelkeznie a .NET Core-futtatókörnyezet által a /tmp könyvtárba írt fájlokhoz, így a /tmp könyvtárat kötetcsatlakoztatással kell megosztani a cél- és oldalkocsitároló között. Ezt például úgy teheti meg, hogy a tárolók közös kötetet vagy Kubernetes emptyDir kötetet használnak. Ha a diagnosztikai eszközöket egy oldalkocsis tárolóból próbálja használni a /tmp könyvtár megosztása nélkül, hibaüzenet jelenik meg a "nem kompatibilis .NET-futtatókörnyezet" folyamattal kapcsolatban.

Tároló PerfCollect használata

Ez az eszköz a következő verziókra vonatkozik: ✔️ .NET Core 2.1 és újabb verziók

A PerfCollect szkript hasznos a teljesítménybeli nyomkövetések gyűjtéséhez, és a .NET Core 3.0 előtti nyomkövetések gyűjtéséhez ajánlott eszköz. Ha tárolóban használja PerfCollect , tartsa szem előtt az alábbi követelményeket:

  • PerfCollect további képességeket igényel az perf eszköz futtatásához. A szükséges képességek minimális készlete az PERFMON és SYS_PTRACE. Egyes környezetek megkövetelik SYS_ADMIN. Mindenképpen indítsa el a tárolót a szükséges képességekkel. Ha a minimális készlet nem működik, próbálkozzon a teljes készlettel.

  • PerfCollect a profilkészítés megkezdése előtt be kell állítani néhány környezeti változót. Ezek beállíthatók Docker-fájlban vagy a tároló indításakor. Mivel ezeket a változókat nem szabad normál éles környezetben beállítani, gyakran csak hozzáadjuk őket egy profillal rendelkező tároló indításakor. A PerfCollect által igényelt két változó:

    • DOTNET_PerfMapEnabled=1
    • DOTNET_EnableEventLog=1

Feljegyzés

Az alkalmazás .NET 7-tel való végrehajtásakor az előző környezeti változók mellett is be kell állítania DOTNET_EnableWriteXorExecute=0 .

Feljegyzés

A .NET 6 az előtagon DOTNET_ szabványosítja a .NET futásidejű viselkedést konfiguráló környezeti változók helyett COMPlus_ . Az COMPlus_ előtag azonban továbbra is működni fog. Ha a .NET-futtatókörnyezet egy korábbi verzióját használja, akkor is használja a COMPlus_ környezeti változók előtagját.

Használat PerfCollect oldalkocsis tárolóban

Ha egy tárolóban szeretne futtatni PerfCollect egy .NET Core-folyamatot egy másik tárolóban, a felhasználói élmény szinte ugyanaz, kivéve az alábbi különbségeket:

  • A korábban említett környezeti változókat (DOTNET_PerfMapEnabled és DOTNET_EnableEventLog) a céltárolóhoz (nem a futóhoz PerfCollect) kell beállítani.
  • A futó PerfCollect tárolónak rendelkeznie kell a SYS_ADMIN képességgel (nem a céltárolóval).
  • A két tárolónak meg kell osztania egy folyamatnévteret.