題 為什麼Windows任務管理器報告的總內存使用量遠高於所有進程內存使用量的總和? [重複]


這個問題在這裡已有答案:

任務管理器顯示我的總內存使用量佔總容量的6%的90%,但沒有一個進程使用超過250 MB的RAM,並且所有正在運行的進程的RAM使用總和小於2 GB。我試過了:

  • 查看Windows 8任務管理器“進程”選項卡上“內存”列中的數字。
  • 查看任務管理器“詳細信息”選項卡上的“工作集”,“私有工作集”,“共享工作集”和“提交大小”列。
  • 查看Process Explorer中與內存相關的類似列。
  • 我已經嘗試過運行Sysinternals RAMMap,但是當我遇到低內存危機時,它會在啟動時崩潰。一旦我解決了問題,RAMMap就會正常運行,但那時為時已晚。

所有都顯示使用了相當少的內存。

有很多人在互聯網上詢問這個問題的變體,各種版本的Windows。他們中的一些人通常通過重新安裝軟件來解決他們的低內存問題;有時從頭開始重新安裝Windows。我正在尋找這些共享的一般問題的答案,並且似乎從未在其他地方得到解答:

  1. 為什麼總的已用內存遠高於所有列出的進程使用的內存,無論我如何計算它們?
  2. Windows如何“知道”使用內存而不知道程序正在使用它?
  3. 哪些進程可能會耗盡內存但不會顯示在列表中?
  4. 有沒有可以提供有關已用內存的更多信息的軟件?

特定於我自己的問題的詳細信息:自從升級到Windows 8.1後,一旦我登錄就會出現問題。我運行任何程序後都會耗盡內存。我在Process Explorer中註意到iexplore.exe的幾個實例正在運行,顯然是自動啟動的。一個特定的實例僅使用幾MB的RAM,但顯示了數億個頁面錯誤。一時興起,我殺了那個特定的進程,內存使用量立即下降了70%。

導致一個具體問題:

  • 如何殺死一個據稱只使用幾MB的進程釋放幾GB?

還有一個(可能很難)的獎金問題:

  • 如果沒有重新安裝Windows,我每次重新啟動計算機時如何避免這種情況?

79
2018-03-11 02:46


起源


內核內存計入使用量。發布RAMMAp圖片: blogs.technet.com/b/askperf/archive/2010/08/13/... - magicandre1981
我認為這個問題應該標題為“為什麼我的內存不足”。 - surfasb
沒有細節,這個問題是不可能回答的。列出已安裝的程序。或者更好的是,從性能監視器轉儲正在運行的進程。 - surfasb
您是否實際上完全關閉/重新啟動計算機,還是使用混合關閉(Windows 8中的默認設置)?切換到Windows 8後,我遇到了類似的問題。我假設一個驅動程序佔用了越來越多的物理內存並且沒有將其恢復,即使在關閉和打開計算機之後也是如此。在幾週內,它累積到幾千兆字節。所以現在每隔幾天我點擊“重啟”或按住shift,同時點擊“關閉”以實際關閉PC。 - Robert
在我的情況下,它是“驅動程序鎖定”內存,由Hyper-V保留,因為它啟用了“動態內存”。我不得不停止所有VM,禁用設置,然後重新啟動它們。感謝RAMMap的建議。 - Dagelf


答案:


順便說一句,你應該盡量不使用“記憶”這個詞。它造成了很多混亂。如果你的意思是物理內存,比如說“物理內存”或“RAM”。如果你的意思是虛擬內存,請說明。如果你的意思是支持商店,請說明。

為什麼總的已用內存遠高於所有列出的進程使用的內存,無論我如何計算它們?

因為操作系統不會浪費物理內存(RAM),除非它別無選擇。

Windows如何“知道”使用內存而不知道程序正在使用它?

因為沒有程序正在使用它。例如,考慮包含剛剛終止的程序的代碼的內存。沒有程序正在使用它。但是使用了該內存,因為它不是免費的並且包含可能有用的數據(如果程序再次運行)。

哪些進程可能會耗盡內存但現在顯示在列表中?

它不被進程使用。

有沒有可以提供有關已用內存的更多信息的軟件?

RAMMAP 可以做到這一點。

只有兩種可能性,可以使用RAM,也可以浪費。顯然,第一個更好。永遠浪費任何空閒內存 - 今天4GB機器不能使用2GB才能明天使用6GB。如果您正在考慮“我現在想要它免費,那麼我以後可以使用它”,請忘記。你現在可以使用它  以後再用

如何殺死一個據稱只使用幾MB的進程釋放幾GB?

您在後備存儲上運行不足,而不是物理內存。您有足夠的可用物理內存但操作系統的後備存儲不足以繼續分配可能需要支持的虛擬內存。

該過程僅使用幾MB的物理內存,但操作系統可能不得不為其保留幾GB的備份虛擬內存。例如,假設進程創建2GB文件的可寫私有內存映射。操作系統必須為進程保留2GB的支持虛擬內存,因為它可能會寫入該映射的每個字節。此外,它可能永遠不會寫入其中任何一個。這就是為什麼你需要一個大小合適的頁面文件。

現代操作系統編寫了許多永遠不會兌現的檢查(有前途的後備存儲)(需要RAM)。如果您已經編寫了一堆可能會或可能不會獲得兌現的大額支票,那麼即使您在銀行有足夠的資金(免費RAM),也無法繼續編寫支票(有前途的支持商店)(承諾盡可能多的支持商店)你有)。分頁文件添加了後備存儲,允許操作系統繼續編寫支票。


9
2018-03-11 05:23



PS:我使用“內存”這個詞並不是因為我不知道RAM和VM之間的區別,而是因為我的計算機只是告訴我它沒有“內存”而沒有給我任何信息它實際上是什麼 手段。 (我認為這意味著RAM,由於我在上一條評論中指定的原因,但我不確定。)我寧願你使用真正的詞彙(如果有必要我可以查找),而不是精心設計的財務隱喻:) - Josh
-1因為在閱讀了答案和所有註釋之後,仍然不清楚為什麼總的已用內存遠高於所有列出的進程使用的內存。 - Bennett McElwee
那個術語,即使沒有程序使用它也會“使用”內存,這與“使用”和“免費”等詞語的正常含義完全不同 - 也許它是微軟的術語,而不是你的術語。無論如何,假設例如當前正在運行程序使用50%的RAM,並且25%未被任何正在運行的程序使用但包含將來可能有用的數據但也可以被丟棄。將它們加在一起並顯示“內存:75%”不會向用戶傳達有用的信息。我認為這是廣泛混淆的地方。 - Bennett McElwee
@BennettMcElwee沒有很好的方法可以將內存使用量減少到一個簡單的數字,但是用戶堅持使用它。這使得開發人員處於一個令人不舒服的位置 - 他們可以提供一個並不總是有用或不提供數字的號碼。大多數操作系統和GUI開發人員選擇第一個選項 - 他們提供的數字會導致很多混亂。如果你的問題是“更多內存會讓我的系統更好地工作”,答案是 - 即使是專家也很難說。 - David Schwartz
@DavidSchwartz你的答案沒有解釋這個,它只是說明了。您能否提供任何鏈接來支持該特定聲明?我正在解釋“物理內存XX%”意味著當前正在使用XX%的物理安裝的RAM,並且其他進程無法使用。我相信我已經通過以下事實得到驗證:超過90%的系統變得容易出現鎖定,並且當應用程序嘗試分配超過100%的內存時,它們會完全崩潰。根據我的經驗,這不是大多數係統運行的標準制度。 - John Neuhaus