[英]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.