ubuntu MemFree和MemAvailable的区别

qvtsj1bj  于 2023-05-16  发布在  其他
关注(0)|答案(4)|浏览(269)

使用Ubuntu 14.02并运行cat /proc/meminfo命令,我得到以下结果:

MemTotal:        1007796 kB
MemFree:           64248 kB
MemAvailable:      64876 kB

我想知道MemFree和MemAvailable之间的确切区别。此外,任何提示,我如何可以更有效地使用系统资源将不胜感激。我订购了一台新的笔记本电脑,但目前,我正在一台内存为1GB的机器上开发。
注意:在执行该命令时,我正在运行两个终端和eclipse,因此您可以看到多任务是多么坚韧。
先谢谢你了。

9njqaruj

9njqaruj1#

Rik货车Riel的comments when adding MemAvailable to /proc/meminfo

/proc/meminfo:MemAvailable:提供估计的可用内存

许多负载平衡和工作负载放置程序都会检查/proc/meminfo来估计有多少可用内存。他们通常通过将“免费”和“缓存”相加来做到这一点,这在十年前是可以的,但在今天几乎肯定是错误的。
这是错误的,因为Cached包括不能作为页面缓存释放的内存,例如共享内存段,tmpfs和ramfs,并且它不包括可回收的slab内存,这可能会占用大多数空闲系统的大部分系统内存,其中有很多文件。
目前,在不将系统推入交换区的情况下,可用于新工作负载的内存量可以通过MemFree、Active(file)、Inactive(file)和SReclaimable以及/proc/zoneinfo中的“低”水印来估计。
然而,这在将来可能会改变,并且用户空间真的不应该期望知道内核内部来估计空闲内存的量。
在/proc/meminfo中提供这样的估计会更方便。如果将来事情发生变化,我们只需要改变一个地方。

14ifxucb

14ifxucb2#

  • MemAvailable*:可用于启动新应用程序内存量,不进行交换。
  • MemFree*:系统未使用的物理内存的数量,单位为千比字节。

虽然我们读的是英语,但对用户来说定义不够清楚。MemAvailable是指软件还是用户空间?applications是什么意思除了交换,还包括hugepagedirectmap怎么样?和kernelpage
这又是一个类比问题,即“可命名的名字不是一个常量名字”。
回到现实,我们真正想知道的是如何计算或者至少哪个更大。
基于ARM的示例

# cat /proc/meminfo
MemTotal:       1053938048 kB
MemFree:        1050967832 kB
MemAvailable:   1047631704 kB
Buffers:           14972 kB
Cached:           125416 kB
SwapCached:            0 kB

基于英特尔的示例

$ cat /proc/meminfo 
MemTotal:       65960628 kB
MemFree:        37493412 kB
MemAvailable:   64537424 kB
Buffers:         5899700 kB
Cached:         19890832 kB
SwapCached:         8672 kB

可悲的是,在打开两个月付费服务器后,问题更加复杂,与CPU有关吗?
好,再回到英语。https://www.merriam-webster.com/dictionary/

  • 免费 *:不收取任何费用或费用
  • 可用 *:立即使用或准备立即使用的

因此,以表格作为记忆的例子。当我们去餐馆时,有时候有空桌,但没有空桌;还有空桌,但没有空桌。

b4lqfgs4

b4lqfgs43#

空闲内存实际上是内核留下的,没有注册该内存块以供使用。
可用内存是指在内核中注册的,可以立即使用的内存块。
判决:我们应该将***可用内存***视为可用内存。额外的空间来运行更多的应用程序。

q9yhzks0

q9yhzks04#

使用MemAvailable比使用MemFree更好。在当前的实现中,如果有一个大的页面缓存,MemAvailable可能比MemFree大得多。
正如Rik货车Riel commented when adding MemAvailable to /proc/meminfo,内核最好估计有多少可用内存(它通过MemAvailable来估计),因为计算方法可能会随着内核实现的变化而变化。
在上面链接的提交中,MemAvailable计算为

MemAvailable = MemFree - low water mark + min(page cache/2 + low water mark) 
                   + some other reclaimable stuff

如果page cache/2小于low water mark,则这可能小于MemFree。但是我们必须记住,不同的内核可能有不同的实现,因为正如Rik货车Riel提醒我们的那样,每个内核都知道它有多少空闲空间。
所以使用MemAvailable来查看一个新进程可以使用多少内存。
man proc告诉我们:

MemAvailable %lu (since Linux 3.14)
    An estimate of how much memory is available for starting new applications, without swapping.

这是对TheBeast's answer的一个外行的解释。

相关问题