分析内存转储以查找泄漏

本文关键字:查找 泄漏 转储 内存 | 更新日期: 2023-09-27 18:36:29

我们有一个 c# .NET 应用程序,其中有内存泄漏。 我使用 procdump 从生产计算机中正在运行的应用程序实例获取内存转储。 生产计算机运行 32 位 Windows XP 和 .NET 4.0。

exe 配置设置为 .net 4.0

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />

当我将转储拉到我的开发框 Windows 8.1 64 位并用 VS 2013 打开它时,转储最初打开正常。但是,当我单击调试托管内存操作时,我收到以下错误消息:

此过程中使用的 CLR 版本不支持内存分析。

我不熟悉解决 Windows 和托管内存环境中的内存泄漏问题,对所涉及的工具几乎一无所知。 我在谷歌上搜索了我得到的错误,但没有找到任何东西。 任何帮助,不胜感激。 如果我错过了一些明显的东西,我深表歉意 - 这里的初级开发人员:-)

分析内存转储以查找泄漏

我不知道

procdump是否可以用于查找.NET中的内存泄漏。我尝试的一种有效方法是:使用Windbg和SOS。有两篇文章解释了如何使用Windbg + SOS来跟踪.NET内存泄漏:

  1. 你的泄漏在哪里?[使用 WinDbg、SOS 和 GCRoot 诊断 .NET 内存泄漏]
  2. 使用 windbg 调试具有内存转储的托管代码内存泄漏

如果你不喜欢Windbg,工具DebugDiag也是追踪内存泄漏的非常有效的工具。

请参阅此链接,它仅适用于在 .Net 4.5 下运行的进程

在我开始之前,有几点需要注意"调试 托管内存"功能在这篇文章中讨论:

  1. 该选项仅在转储摘要页中可用 Visual Studio 2013的终极版本。 如果您使用的是高级版或 专业你不会看到选项
  2. 收集转储文件所针对的进程必须在 .NET 4.5 或更高版本上运行。如果转储是在 3.5 或 以前该选项不会出现,如果它是在 4.0 上收集的,它 将无法启动并显示错误消息。

从 Windows 7/Server 2008 R2 开始,有一种方法可以创建进程的克隆并创建此克隆的转储,以便您关心的进程不需要挂起。使用 procdump -r 在捕获转储时使用此功能。

还可以使用捕获 ETW 跟踪并通过 PerfView 分析数据。

https://superuser.com/questions/846079/how-can-i-create-a-memory-dump-of-a-production-system-without-affecting-performa/846156#846156