WinDbg MEM_COMMIT是1GB,eeheap显示150MB,找不到剩余内存

我在尝试从.dmp文件中找到一些非托管内存分配时遇到了一些麻烦.

我一直试图按照提示 – here,但我打了一个墙

!address -summary给我下面的内容,显示MEM_COMMIT是1.030Gb,这是预期的(请忽略TB的内存,这可能是因为这是来自虚拟Web服务器)

!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分配内存之间的内存差异在哪里使用

任何帮助都会很棒

最佳答案 在“使用情况摘要”中,您可以看到

<unknown>  17 GB
Heap       235 MB

154 MB used by .NET GC Heaps
235 MB used by Heaps
234 MB used by Images
up to 50 MB in Stacks
... some smaller parts not really relevant

这已经解释了620到670 MB的内存,具体取决于实际提交的堆栈内存量.

如果在没有-gc参数的情况下执行!eeheap,您将看到.NET使用的内存更多,因为它还具有LoaderHeaps,JIT Heaps,域堆等.

点赞