在Linux的free命令响应中,可用和免费内存分别是什么?

42

我在我的Linux主机上运行了free命令,输出如下:

free
              total        used        free      shared  buff/cache   available
Mem:      263846320    47746620     3290072     1140808   212809628   214382420
Swap:             0           0           0

我无法弄清楚这个“可用部分”正在指定什么。

尽管总内存很高,已使用的内存仅约为18.09%,但显示的可用内存非常少,即约为1.24%。

free -h
              total        used        free      shared  buff/cache   available
Mem:           251G         45G        3.1G        1.1G        202G        204G
Swap:            0B          0B          0B

这是否意味着当可用内存非常少时,我将无法启动更多应用程序?已使用的内存仅为18%。因此,空闲内存不应该是82%而不是如上所示命令显示的1.24%吗?

我很困惑,请问有人可以帮忙吗?


16
http://www.linuxatemyram.com/ - Oliver Charlesworth
@OliverCharlesworth 这是一个好答案 :) - HRgiger
2
这个问题似乎不适合在 Stack Overflow 上讨论,根据 [help] 的定义。它可能更适合于 [unix.se] Stack Exchange 网站。 - Toby Speight
1
转载自 https://askubuntu.com/q/867068/255443 - Simon Forsberg
1个回答

31

现代操作系统努力使尽可能少的内存空闲。空闲内存实际上更难使用,因为它必须从空闲状态转换为正在使用状态。已经在使用中的内存,也就是可用但不空闲的内存,可以轻松地切换到另一种用途。

所有这些都是正常的。空闲内存是浪费的,不会让您的系统更快。

如果你想“我想现在把我的内存空闲出来,以便以后使用”,请意识到这没有意义。您无法为以后保存内存。一个拥有4GB内存的系统今天使用2GB,明天无法使用6GB。您现在和以后都可以使用内存。这里没有权衡之处——使用内存是免费的。唯一的替代方案是浪费它。为什么要让您的系统浪费更多的内存?


34
可用内存=估算可用于启动新应用程序的内存量,而不会发生交换。与缓存或空闲字段提供的数据不同,此字段考虑了页面缓存,并且由于某些项正在使用,不是所有可回收内存块都将被回收(在/proc/meminfo中的MemAvailable,在3.14内核上可用,在2.6.27+内核上模拟,在其他情况下与free相同)。 - Daniel Garmoshka
5
@DanKey提供的信息更可能误导而不是教育,因为它没有考虑到内核保存的可以丢弃以释放内存以供新应用程序使用的内存。在许多实际情况下,这种信息是无用的,因为它与实际情况相去甚远(想象一下如果80%的已用内存是文件系统元数据缓存,这种情况确实存在)。认为自己懂得某些事情,而实际上并不了解,这是非常危险的。 - David Schwartz
3
因此,请提供建设性的信息,例如“内核正在保留的内存可以丢弃,以便为新应用程序腾出内存”,而不是情绪化的“空闲内存是浪费的”或误导性的“您无法将内存保存到以后使用”,因为空闲内存确实等待着以后使用。 - Daniel Garmoshka
4
@DanKey 这并不是建设性的,因为它会导致对知识的理解变得零散和混乱。与其试图在几段文字中给别人完整的理解,保持简单反而更有帮助。此外,使用的内存和未被使用的内存一样都等待着后续的使用。所有的内存都是为了后续的使用而存在的。 - David Schwartz
1
关于“估计有多少内存可用于启动新应用程序”的问题。假设一个现有的进程突然需要更多的内存,那么“可用”类别的内存会被分配给该应用程序吗?还是该进程将耗尽“空闲”内存的供应,然后被内核终止? - Bijan Massoumi
1
@BijanMassoumi 不是任何一个。那个问题基于对内存工作方式的根本误解。例如,当你说“一个现有进程突然需要更多的内存”时,这是关于进程需要什么的模棱两可。例如,如果它通过调用malloc请求了大量内存,那么空闲RAM的数量无关紧要,因为它们来自不同的池。(将RAM视为银行中的钱,而malloc则像写支票一样。交换空间就像信用额度。) - David Schwartz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接