题 free的输出中缓冲区/缓存行的含义


为什么我的服务器显示

            total      used      free   shared buffers    cached
    Mem: 12286456  11715372    571084        0   81912   6545228
-/+ buffers/cache:  5088232   7198224
   Swap: 24571408     54528  24516880

我不知道在linux中计算内存。我认为它说5088232用于7198224是免费的,这意味着它实际上消耗了5GB的RAM?


150
2017-11-17 10:37




serverfault.com/questions/23433/... - Kyle Brandt♦
linuxatemyram.com - Sasha


答案:


价值的意义

第一行意味着:

  • total:你的总(物理)RAM(不包括内核在启动时永久保留的一小部分);这就是为什么它显示ca. 11.7 GiB,而不是12 GiB,你可能拥有它。
  • used:OS使用的内存。
  • free:内存未使用。

total = used + free

  • shared / buffers / cached:这显示了特定用途的内存使用情况,这些值包含在值中 used

第二行给出了第一行调整值。它给出了原始值 used  减去 总和 buffers+cached 和原来的价值 free   总和 buffers+cached因此它的标题。这些新值通常比第一行更有意义。

最后一行(Swap:)提供有关交换空间使用情况的信息(即已临时移动到磁盘的内存内容)。

背景

要真正了解数字的含义,您需要了解Linux中虚拟内存(VM)子系统的背景知识。只是一个简短的版本:Linux(像大多数现代操作系统一样)总是会尝试使用免费的RAM来缓存内容,所以 Mem: free 几乎总是很低。因此行 -/+ buffers/cache: 显示,因为它显示忽略缓存时有多少内存可用;如果内存不足,缓存将自动释放,因此它们并不重要。

如果Linux系统内存真的很低 free 价值 -/+ buffers/cache: 线路变低。

有关数字含义的更多详细信息,请参阅例如问题:

procps的变化3.3.10

注意输出 free 在procps 3。3。10(2014年发布)中进行了更改。报告的列现在是 “total”,“used”,“free”,“shared”,“buff / cache”,“available”,并且一些值的含义发生了变化,主要是为了更好地考虑Linux内核的slab缓存。

看到 Debian Bug报告#565518 为了动力,和 改变了什么? free 输出从14.04到16.04是什么意思? 了解更多详情。


215
2017-11-17 11:42



你可以扩展Linux可能缓存的内容吗?它是被访问过的文件还是网络资料? - CMCDragonkai
@CMCDragonkai:答案 serverfault.com/questions/23433/... 详细地解决了constitues“cache”和“buffer”的问题。 - sleske
我不认为语句“total = used + free”是正确的,请参阅我的机器上的以下输出: $ free -h  total used free shared buff/cache available  Mem: 3.4G 585M 152M 11M 2.6G 2.5G  Swap: 4.0G 84M 3.9G - Sebastian
@Sebastian:啊,有趣。似乎免费的输出被改变了(在3.3.10中)。我编辑了我的答案,提到了这个。如果您对此更改感兴趣,请考虑提出一个新问题:-)。 - sleske
total = used + free + buff/cache - danger89


对于需要更简单,逐步解释的任何人,请检查 http://thoughtsbyclayg.blogspot.com/2008/09/display-free-memory-on-linux-ubuntu.html他的解释给了我很多帮助。


7
2018-02-13 22:06



meta.stackexchange.com/q/8231/133242 - Matt Ball


缓冲区/缓存行显示程序使用了多少内存(第一列),并且可供程序使用(第二列)。这是一个相当深奥的数字,而不是你在实践中真正看到的东西。


2
2017-11-17 11:03



第一行(mem line)的含义是什么? - Muahmmad Zeeshan
你已经在系统中安装了12GB的RAM,其中使用了11GB的RAM,目前还没有使用0.5GB左右的RAM。大约82MB的已用内存用于缓冲区(网络连接等),而大约6.5GB用于存储磁盘上的数据副本,因此如果再次需要,则不必重新读取数据。 - womble♦
@Muhammad:“82MB是免费的。” - 不,57MiB是免费的(但这并不重要,请参阅我的回答)。 “现在这一切都意味着系统已达到极限” - 不,完全没有。该系统具有6.9GiB用于缓存,它可以很容易地提供给应用程序,因此有很大的空间。此外,交换使用率非常低(大约50MiB)。如果内存开始变紧,交换使用率会上升。目前你几乎没有使用你拥有的一半RAM。 - sleske
您是否考虑过在某个时候提出新问题? - womble♦
我不同意,缓冲区/缓存行是系统的实际可用内存,因此如果您想知道系统是否有程序空间,则最相关。 - eckes