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 内存(这是在虚拟机上运行,不确定是否相关)。