Active: Memory that has been used more recently and usually not reclaimed unless
absolutely necessary.
Inactive: Memory which has been less recently used. It is more eligible to be
reclaimed for other purposes
Committed_AS: The amount of memory presently allocated on the system. The committed
memory is a sum of all of the memory which has been allocated by
processes, even if it has not been "used" by them as of yet. (...)
我的問題涉及 Commited_AS 內存,以及實際使用/未使用的部分。我的理解是,活動記憶體是實際使用的提交記憶體的一部分。但是,我不知道非活動記憶體會發生什麼事;除了最近未使用的記憶體之外,它是否還包括已提交但未使用的記憶體?
答案1
非活動記憶體是進程在某個時刻使用過且仍在分配但最近未使用過的記憶體。它是最有可能被調出以便為新需要的區塊騰出空間的記憶體。
提交的記憶體是名義上分配給進程的所有空間的總和。它是所有進程認為可用的記憶體空間的總和,包括活動的(在RAM 中並且最近使用過)、非活動的(在RAM 中並且在某個時刻使用過,但由於不是最近才使用而受到分頁)分頁(一旦在RAM 中並且最近使用過)使用過,因為調出交換空間)並且從未使用過(由 malloc() 返回但尚未觸及的空間)
答案2
看man proc
;直接引用:
分配 1GB 記憶體(使用 malloc(3) 或類似方法)但僅觸及該記憶體的 300MB 的進程將顯示為僅使用 300MB 內存,即使它為整個 1GB 分配了位址空間。這 1GB 是 VM 已「提交」的內存,可以隨時由分配應用程式使用。
Committed_AS
指系統上為動態記憶體分配請求的記憶體總量;這意味著不活動的記憶體(不在堆中)不被計算在內。這就是虛擬記憶體發揮作用的地方;進程「認為」它擁有它請求的所有內存,但實際上它只擁有它需要的內存。
這也直接關係到overcommit_memory
sysctl
配置設置,可用於防止“過度分配”內存,以便伺服器不會OOM如果它一次需要所有“提交的”內存,則它本身。