【发布时间】:2023-03-18 15:16:01
【问题描述】:
我在尝试从 .dmp 文件中查找一些非托管内存分配时遇到了一些麻烦。
我一直在尝试遵循提示 - here,但我遇到了一些问题
!address -summary 给了我下面的信息,显示 MEM_COMMIT 为 1.030Gb,这是预期的(请忽略 TB 的内存,这可能是由于事实上这是来自虚拟网络服务器)
!eeheap -gc 给了我下面显示的 .net 内存使用量为 150MB(如果我运行 !eeheap 就其本身而言,我没有看到任何额外的堆,我仍然看到 8 个 GC 堆,总计 150MB)
这让我相信大部分内存使用来自非托管内存
我一直遵循的说明然后说使用 !heap -s 来查找非托管内存的位置。当我这样做时,我会看到以下内容
现在我希望看到一个堆正在使用大量内存,我可以进一步分析以尝试定位非托管内存,但我没有看到任何接近填充的堆显示已用内存的 1GB
我确实注意到 !address -summary 在 PAGE_READWRITE 中显示 600MB,所以我尝试了 !address /f:PAGE_READWRITE,我希望这样做给我一些别的东西,但它给了我一个 PAGE_READWRITE 使用的内存列表,我不太清楚如何进一步分析
基本上我想知道 1GB 和 150MB 的 .net 分配内存之间的内存差异在哪里使用
任何帮助都会很棒
【问题讨论】:
-
免费 TB 是 64 位应用程序的结果。您可以获得该数量的虚拟内存,但它可能会被交换到磁盘。
-
在DebugDiag分析器(MemoryAnalysis)中加载dmp
-
@magicandre1981 - 我还没有设法让 DebugDiag 向我提供有关非托管内存的任何信息
-
我从 DebugDiag 获得的唯一信息似乎来自托管内存,它报告的总内存为 150mb
标签: memory memory-management memory-leaks windbg