Working set 资源监视器中报告的内存未在UMDH中显示
我有一个服务,它会随着时间的推移间歇性地开始占用服务器内存,需要重新启动以释放内存。我使用gflags打开+ust,重新启动服务,并开始拍摄预定的UMDH快照。当问题再次出现时,资源管理器报告工作集和专用字节下有多个GB,但UMDH快照只占进程堆中的少数MB分配 在UMDH快照文件的顶部,它提到“仅转储堆管理器为其收集堆栈的分配”。Working set 资源监视器中报告的内存未在UMDH中显示,working-set,resource-monitor,umdh,Working Set,Resource Monitor,Umdh,我有一个服务,它会随着时间的推移间歇性地开始占用服务器内存,需要重新启动以释放内存。我使用gflags打开+ust,重新启动服务,并开始拍摄预定的UMDH快照。当问题再次出现时,资源管理器报告工作集和专用字节下有多个GB,但UMDH快照只占进程堆中的少数MB分配 在UMDH快照文件的顶部,它提到“仅转储堆管理器为其收集堆栈的分配”。 当指定了+ust标志时,进程中的分配怎么可能没有跟踪 如何找出这些GBs的分配位置和方式?UMDH是用户模式转储堆的缩写。堆这个词是这里的一个关键术语:它只引用C+
当指定了+ust标志时,进程中的分配怎么可能没有跟踪
如何找出这些GBs的分配位置和方式?UMDH是用户模式转储堆的缩写。堆这个词是这里的一个关键术语:它只引用C++堆管理器。这意味着,所有的内存分配的其他方法比C++堆管理器没有被UMDH .< /P>跟踪。 这可能是
- 直接调用
VirtualAlloc()
- .NET使用的内存,因为.NET有自己的堆管理器
VirtualAlloc()
,请使用WinDbg命令!地址-摘要
可能会给出答案。对于.NET,SOS扩展和!dumpheap-stat
可以给出答案