為什麼 Windows 不能正確回報 VirtualBox 使用的 RAM?

為什麼 Windows 不能正確回報 VirtualBox 使用的 RAM?

因此,出於好奇,我決定查看執行 Windows 7 VM(分配了 3 GB RAM)時的 RAM 使用情況。我很驚訝地看到結果,我想知道為什麼這些結果是這樣的:

我的主機(win 8.1)任務管理器顯示以下內容:主機行程資源管理器

這實際上只顯示了 Chrome 有多大……無論如何,請注意 VirtualBox 管理器僅使用 75 MB 的 RAM。嗯,有道理,畢竟這只是主管而不是虛擬機器本身。但是等等,這些數字(即使您將看不到的數字加起來)也不會等於當前的 RAM 使用量(「效能」標籤中報告的 9 GB)。鑑於我的客戶電腦現在使用 1.5 GB,人們會期望它在清單中的位置更高一些...

好吧,讓我們嘗試一個不同的工具:RAM映射表

首先,再看兩張 RAMMap 的截圖:在此輸入影像描述 在此輸入影像描述

好吧,「進程私有」的部分看起來大約是 3 GB(除非我粗略地看了一下,差距是一個數量級),但仍然——除了 Chrome 佔用了超過 100 MB 的 RAM 之外。

哦,嘿,看看這個:在此輸入影像描述

看來我終於找到它在哪裡了……但這是什麼? VBox 是否將訪客的 RAM 視為只是不斷載入到 RAM 中的檔案?這是……完全不同的東西嗎?為什麼 Windows 不在其常規任務管理器工具中通知我這一點?

TL;DR:Windows,你沒有顯示所有 RAM 使用情況

答案1

它顯示在 RAMMap 下驅動程式已鎖定。查看您指派給虛擬機器的 3GB 使用情況。

在此輸入影像描述

VM 使用此內存,因此其他工具無法使用它。

答案2

TL;DR:該進程正在使用內存,停止使用內存,Windows 只是懶得處理它。

Windows 不會在進程下的任務管理器中顯示 RAM 使用情況,除非進程要求 RAM 並對其使用有一定的控制。如果作業系統將 RAM 提供給進程來支援映射,而這些映射是可丟棄的,那麼顯示它們對進程負責將會令人困惑。這將導致一個進程的使用數量變化很大,因為其他進程導致這些映射變得不受支援。

您沒有什麼特別的理由應該關心 Windows 碰巧為這個進程提供了 2GB RAM,不是因為它請求它,而是因為它想不出更好的方法來處理該記憶體。當然,如果 Windows 確實與記憶體有其他關係,則可以隨時收回該 RAM。

如果進程實際使用內存,它將被視為其工作集的一部分併計入進程。如果 Windows 現在清理內存,並且該進程稍後使用該內存,則 Windows 只需要再次分配它。因此,現在做額外的工作很可能是為了以後做更多的工作,這是沒有意義的。

相關內容