繁体   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