为什么可用内存小于free命令中的空闲内存?

为什么可用内存小于free命令中的空闲内存?

我使用的是 CentOS 7,我发现我的可用内存小于可用内存,但为什么?

root@localhost:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           251G        1.9G        249G        9.2M        260M        248G
Swap:           64M         49M         14M

有一个同样的问题,但答案没有解释为什么可用的比免费的少,只是谈论缓存。

为什么centos7 free命令输出可用值小于free值

答案1

可用内存只是对系统中如何实际使用内存来加载程序的估计,因此它不是一个精确值

正如您可能已经知道的正常行为就是让可用内存大于空闲内存,但在你的情况下却发生相反的情况,因为用于计算此估计值的统计信息将得到更大的缓存/缓冲区值的帮助,但它们在您的系统中会受到惩罚,因为您没有高缓存或缓冲区,并且因为它考虑到负数的所有其他因素,您的可用内存将受到更大的负面影响...所以它可能被低估了,因为它会考虑到所有可用内存的这个百分比对于许多其他事情来说是必要的,而不是简单的加载程序(特别是当您加载程序时 - 系统将需要越来越多的内存来存储有关进程的信息等等 - 还比如拥有合理的缓存和缓冲区值……)。

来自github:

内存可用:一个估计有多少内存可用于启动新应用程序而无需交换。根据 MemFree、SReclaimable、文件 LRU 列表的大小以及每个区域中的低水位线计算得出。估计考虑到系统需要一些页面缓存才能正常运行,并且由于项目正在使用中,并非所有可回收的slab都是可回收的。这些因素的影响因系统而异。要获得更详细的答案,您需要发布 /proc/meminfo 的内容。

答案2

如果您阅读 CentOS 7 手册页free,它会解释该available字段考虑到并非所有可回收内存都会因某些项目正在使用而被回收(例如,可供内核使用的内存),这与缓存和空闲字段不同。我相信这可能是您所看到的差异的原因。

available:估计有多少内存可用于启动新应用程序,无需交换。与缓存或空闲字段提供的数据不同,该字段考虑了页面缓存,并且由于项目正在使用,并非所有可回收内存板都会被回收(/proc/meminfo 中的 MemAvailable,在内核 3.14 上可用,在内核 2.6.27+,其他方面与免费版本相同)

相关内容