DebugDiag中的LeakTrack没有捕获堆栈跟踪,因此不确定从何处开始。
我有一个内存泄漏的.NET应用程序(作为Windows服务运行的NServiceBus进程)。在5-6天的过程中增长到大约10GB。
我在WinDbg中使用!address –summary
进行了procdump和基本分析。我看到堆提交大小为8.6GB。
接下来,我在转储上运行DebugDiag以获取托管内存。在托管内存中根本没有红色标记,因此我尝试查看本机分配。
所以我在DebugDiag(2.1.0.7)中选择了
在监控泄漏时立即记录调用堆栈(AKA" FastTrack")注意:监控超过15分钟时不建议使用)
然后我跑了30分钟(与警告相反)。运行分析时,我收到一条消息,说它无法获得调用堆栈,因为我要么运行时间超过15分钟(我没有),要么我需要设置"开始记录调用堆栈立即" (我做过)。
所以,我决定再试一次。我这次设置它运行2个小时,并没有将它设置为"立即开始录制"。同样的消息。
这是来自9GB procdump的虚拟内存摘要(没有运行泄漏检测)
那么从DebugDiag获取调用堆栈需要做什么?我的罪魁祸首似乎是在坚定的记忆中(我不确定我是否真的理解在这种情况下保留与承诺)。但不知道如何确定罪魁祸首是什么。
也不确定为什么DebugDiag认为有8TB内存(这是在虚拟机上运行,不确定是否相关)。
答案 0 :(得分:0)
你可以使用WPA(Windows性能分析器)可以通过使用虚拟alloc配置文件获取VirtualAlloc跟踪这里是一个9分钟的视频,解释了VirtualAlloc相关问题的分析示例
使用Windows性能分析器了解VirtualAlloc使用情况 http://channel9.msdn.com/events/Build/BUILD2011/HW-977P