3

DebugDiag 中的 LeakTrack 没有捕获堆栈跟踪,所以不知道从哪里开始。

我有一个内存泄漏的 .NET 应用程序(作为 Windows 服务运行的 NServiceBus 进程)。在 5-6 天的过程中增长到大约 10GB。

!address –summary在 WinDbg 中使用了 procdump 和基本分析。我看到堆提交大小为 8.6GB。

接下来,我在托管内存的转储上运行 DebugDiag。托管内存中根本没有危险信号,因此我尝试查看本机分配。

所以我DebugDiag(2.1.0.7),并选择

监控泄漏时立即记录调用堆栈(又名“FastTrack”)注意:不建议监控超过 15 分钟)

然后我运行了 30 分钟(与警告相反)。运行分析时,我收到一条消息,它无法获取调用堆栈,因为我没有运行超过 15 分钟(我做了)或者我需要设置“立即开始记录调用堆栈”(我做了)。

所以,我决定再试一次。这次我设置为运行2小时,并没有设置为“立即开始录制”。相同的消息。

在此处输入图像描述

在此处输入图像描述

这是 9GB procdump 的虚拟内存摘要(没有运行泄漏检测)

在此处输入图像描述

那么我需要做什么才能从 DebugDiag 获取调用堆栈?我的罪魁祸首似乎是在提交的内存中(我不确定我是否真的理解在这种情况下保留与提交)。但是不知道如何确定罪魁祸首。

也不确定为什么 DebugDiag 认为有 8TB 内存(这是在虚拟机上运行,​​不确定是否相关)。

4

1 回答 1

0

您可以使用 WPA(Windows 性能分析器) VirtualAlloc 跟踪可以通过使用虚拟分配配置文件获得 这里是一个 9 分钟的视频,解释了一个示例 VirtualAlloc 相关问题的分析

使用 Windows 性能分析器了解 VirtualAlloc 的使用情况 http://channel9.msdn.com/events/Build/BUILD2011/HW-977P

于 2015-01-07T15:10:37.510 回答