gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:14:55 26 4
gpt4 key购买 nike

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

我一直在尝试遵循提示 - here但我有点撞墙

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

Address Summary

!eeheap -gc 给我下面显示 .net 内存使用量为 150MB(如果我自己运行 !eeheap 我没有看到任何额外的堆,我仍然看到 8 个 GC 堆,总共 150MB)

eeheap

这让我相信大部分内存使用来自非托管内存

我一直遵循的说明然后说使用 !heap -s 找到非托管内存的位置。当我这样做时,我会看到以下内容

heap -s

现在我希望看到大量内存被堆使用,我可以进一步分析以尝试定位非托管内存,但我没有看到任何接近填充的堆显示 1GB 的已用内存

我确实注意到 !address -summary 在 PAGE_READWRITE 中显示 600MB,所以我尝试了 !address/f:PAGE_READWRITE 我希望这会给我一些其他的东西,但它给了我一个 PAGE_READWRITE 使用的内存列表,我不太确定如何进一步分析

基本上我想知道 1GB 和 150MB 的 .net 分配内存之间的内存差异在哪里被使用

任何帮助都会很棒

最佳答案

在“使用摘要”中,您可以看到

<unknown>  17 GB
Heap 235 MB
<unknown>可以是 .NET 或由 VirtualAlloc() 直接分配的内存.恕我直言,有人使用 VirtualAlloc()直接是相当罕见的。
Heap是通过堆管理器分配的内存。所以, !heap -s不会显示超过 235 MB。
MEM_COMMIT只是另一种内存状态,它可以处于任何使用状态。要找到 1 GB 的已提交内存,您需要总结您拥有的所有内容:
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 的内存,具体取决于实际提交的堆栈内存量。

如果执行 !eeheap没有 -gc参数,您会看到 .NET 使用了更多内存,因为它还有 LoaderHeaps、JIT Heaps、域堆等。

关于memory - WinDbg MEM_COMMIT 为 1GB,eeheap 显示为 150MB,找不到剩余内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30862007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com