簡體   English   中英

什么是調查 .net 核心 linux ZB76E98AF9AAA680979BF5A65B2 容器上 memory 泄漏的正確方法

[英]What is the proper way to investigate memory leaks on .net core linux kubernetes container

我有 .net 核心應用程序在 linux docker 容器上運行,並且在進行轉儲(核心 2.2 或 3.0)時,我無法在 PerfView 中打開它們

根據此說明進行轉儲: https://github.com/dotnet/diagnostics/blob/master/documentation/dotnet-dump-instructions.md

PerfView 在日志中顯示此錯誤:

Creating heap dump C:\temp\dumps\dump\dump-1.gcdump from process dump C:\temp\dumps\dump\dump-1.dmp.
HeapDump Error: Microsoft.Diagnostics.Runtime.ClrDiagnosticsException: Could not load crash dump 'C:\temp\dumps\dump\dump-1.dmp', HRESULT: 0x80070057
   at Microsoft.Diagnostics.Runtime.DbgEngDataReader..ctor(String dumpFile)
   at Microsoft.Diagnostics.Runtime.DataTarget.LoadCrashDump(String fileName)
   at GCHeapDumper.InitializeClrRuntime(String processDumpFile, DataTarget& target, ClrRuntime& runtime)
   at GCHeapDumper.DumpHeapFromProcessDump(String processDumpFile)
   at Program.MainWorker(String[] args)

轉儲文件是在容器內創建的,因此無法直接從您的計算機訪問。 (如果您正在為 Windows 運行 Windows 和 Docker 甚至還有一個虛擬機。)

您需要做的是將啞文件從容器復制到您的主機,然后打開它。 這可以使用docker cp命令來實現,例如: docker cp <container name>:<path in container>dump-1.gcdump C:\temp\dumps\dump\dump-1.gcdump

我相信您需要使用 Linux 調試器來打開 Linux 轉儲。 Afaik PerfView 僅支持 Windows 轉儲。

CoreClr 團隊提供 SOS 調試器擴展,可以從 lldb 調試器中使用。 https://github.com/dotnet/coreclr/blob/master/Documentation/building/debugging-instructions.md

由於跨平台 DAC,.NET 內核上的轉儲不跨平台兼容(有關更多信息,請參閱https://github.com/dotnet/runtime/blob/master/docs/design/coreclr/botr/dac-notes。 MD )。 已經討論過/計划支持這一點,但還沒有發生。

您可以使用 dotnet-gcdump 工具,它應該是跨平台兼容的。 這是有關如何使用它的文檔: https://github.com/dotnet/diagnostics/blob/master/documentation/dotnet-gcdump-instructions.md

可以在 PerfView 上查看從 dotnet-gcdump 獲取的轉儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM