簡體   English   中英

資源監視器中報告的內存未顯示在 UMDH 中

[英]Memory reported in Resource Monitor not showing in UMDH

我有一個服務隨着時間的推移間歇性地開始吞噬服務器內存,需要重新啟動才能釋放它。 我用 gflags 關閉 +ust,重新啟動服務,並開始拍攝預定的 UMDH 快照。 當問題再次發生時,資源管理器在工作集和專用字節下報告了多個 GB,但 UMDH 快照僅占進程堆中的幾個 MB 分配。

在 UMDH 快照文件的頂部,它提到“僅轉儲堆管理器收集堆棧的分配”。
當指定了 +ust 標志時,進程中的分配怎么可能沒有蹤跡?

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

UMDH 是用戶模式轉儲堆的縮寫。 術語堆是一個關鍵項的位置:它是指只有C ++堆管理器。 這意味着 UMDH 不會跟蹤通過 C++ 堆管理器以外的其他方式分配的所有內存。

這可以是

  • 直接調用VirtualAlloc()
  • .NET 使用的內存,因為 .NET 有自己的堆管理器

但即使對於 C++,也存在大於 512 kB 的分配無法由 C++ 堆管理器有效管理的情況,因此它只是將其重定向到VirtualAlloc()而不會創建如此大分配的堆段。

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

對於直接調用VirtualAlloc() ,WinDbg 命令!address -summary可能會給出答案。 對於 .NET,SOS 擴展和!dumpheap -stat可以給出答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM