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如果它一次需要所有“提交的”内存,则它本身。