首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >资源监视器中报告的内存在UMDH中未显示

资源监视器中报告的内存在UMDH中未显示
EN

Stack Overflow用户
提问于 2016-04-21 23:20:47
回答 1查看 166关注 0票数 1

我有一个服务,它会随着时间的推移间歇性地开始吞噬服务器内存,需要重新启动才能释放它。我将+ust换成了gflag,重新启动了服务,并开始拍摄预定的UMDH快照。当问题再次出现时,资源管理器报告工作集和专用字节下有多个GB,但UMDH快照仅占进程堆中的几个MB分配。

在UMDH快照文件的顶部,它提到“只有堆管理器收集堆栈的分配才会被转储”。

当指定了+ust标志时,进程中的分配怎么可能没有跟踪呢?

我如何才能找到这些GB的分配位置/方式?

EN

回答 1

Stack Overflow用户

发布于 2017-03-22 03:00:25

UMDH是用户模式转储堆的缩写。在这里,术语堆是一个关键术语:它仅指C++堆管理器。这意味着通过C++堆管理器以外的其他方式分配的所有内存都不会被UMDH跟踪。

这可以是

  • 直接调用.NET使用的.NET,因为.NET有自己的堆管理器

但即使对于C++,也存在这样一种情况,即C++堆管理器无法有效地管理大于512 kB的分配,因此它只是将其重定向到VirtualAlloc(),而不会创建如此大的分配的堆段。

如何找出这些GB的分配位置/方式?

对于对VirtualAlloc()的直接调用,WinDbg命令!address -summary可能会提供应答。对于.NET,SOS扩展和!dumpheap -stat可以给出答案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36773949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档