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-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 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 tárolókban a .NET Core 3.1-et vagy újabb verziót célzó .NET-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.
.NET globális CLI-eszközök használata egy oldalkocsis tárolóban
Ha a .NET 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:
- 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).
- A .NET globális parancssori felület diagnosztikai eszközeinek hozzá kell férniük a .NET-futtatókörnyezet által a /tmp könyvtárba írt fájlokhoz, ezért 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.
Használat PerfCollect
tárolóban
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 azperf
eszköz futtatásához. A szükséges képességek minimális készlete azPERFMON
ésSYS_PTRACE
. Egyes környezetek megkövetelikSYS_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 egy Docker-fájlban vagy a tároló indításakor állíthatók be. 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-folyamatot egy másik tárolóban, a felhasználói élmény szinte ugyanaz. A különbségek a következők:
- A korábban említett környezeti változókat (
DOTNET_PerfMapEnabled
ésDOTNET_EnableEventLog
) a céltárolóhoz (nem a futóhozPerfCollect
) kell beállítani. - A futó
PerfCollect
tárolónak rendelkeznie kell aSYS_ADMIN
képességgel (nem a céltárolóval). - A két tárolónak meg kell osztania egy folyamatnévteret.