为什么我的服务器显示

            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?

评论

serverfault.com/questions/23433/…

对于需要更简单,逐步的解释的人,请查看Thoughtsbyclayg.blogspot.com/2008/09/…,他的解释对我有很大帮助。

linuxatemyram.com

这是完全错误的。 buff / cache绝对不是使用过的一部分。我只是在看一个装有1G和12G buff / cache的盒子。 unix.stackexchange.com/questions/521488/…

#1 楼

值的含义

第一行的意思是:



total:您的总(物理)RAM(不包括内核永久保留的一小部分)在启动时为其自身保留);这就是为什么它显示ca。 11.7 GiB,而不是您可能拥有的12 GiB。

used:操作系统正在使用的内存。

free:未使用的内存。

total = used + free



shared / buffers / cached:显示特定用途的内存使用,这些值包含在used的值中。 />
第二行给出调整后的第一行值。它给出used的原始值减去buffers+cached的总和,再加上free的原始值加上buffers+cached的总和,因此得到其标题。这些新值通常比第一行更有意义。

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

背景

要真正理解数字的含义,您需要了解Linux中的虚拟内存(VM)子系统的背景知识。只是一个简短的版本:Linux(像大多数现代OS一样)将始终尝试使用空闲RAM来缓存内容,因此Mem: free几乎总是很低。因此,显示了行-/+ buffers/cache:,因为它显示了忽略高速缓存时可用的内存量。

如果free行中的-/+ buffers/cache:值变低,则Linux系统的内存确实不足。

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


在Linux中,free命令报告的“缓冲区”和“缓存”之间有什么区别?
为什么Red Hat Linux报告较少的空闲内存?系统比实际可用的系统要多?

procps 3.3.10中的更改

请注意,在procps 3.3.10(2014年发布)中更改了free的输出。现在报告的列为“总计”,“已使用”,“免费”,“共享”,“ buff / cache”,“可用”,并且某些值的含义已更改,主要是为了更好地说明Linux内核的面板缓存。

有关动机,请参见Debian Bug报告#565518,free输出从14.04到16.04的变化意味着什么?有关更多详细信息。

评论


您能否扩展Linux可能缓存的内容?是被访问的文件还是网络的东西?

– CMCDragonkai
15年8月2日在13:08

@CMCDragonkai:serverfault.com/questions/23433/…的答案详细说明了构成“缓存”和“缓冲区”的内容。

–sleske
15年8月2日,16:03

我认为语句“ total = used + free”是正确的,请参见我的计算机上的以下输出:$ free -h总共使用了可用的共享buff /缓存可用内存:3.4G 585M 152M 11M 2.6G 2.5G交换:4.0 G 84M 3.9G

–SCBuergel.eth
17-2-13在9:35



@Sebastian:嗯,很有趣。似乎免费的输出已更改(在3.3.10中)。我编辑了答案以提及这一点。如果您对此更改感兴趣,请考虑提出一个新问题:-)。

–sleske
17年2月13日在10:17

总计=已使用+免费+ buff /缓存

–danger89
18-10-26在17:41

#2 楼

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

评论


第一行(内存行)是什么意思

–穆罕默德Zeeshan
09年11月17日在11:14

您已经在系统中安装了12GB的RAM,其中已使用11.5GB,当前未使用0.5GB左右。大约82MB的已用内存用于缓冲区(网络连接等),而大约6.5GB的内存用于在磁盘上存储数据的副本,因此,如果再次需要,则不必重新读取数据。

–womble♦
09年11月17日在11:33

@穆罕默德:“ 82MB是免费的。” -不,57MiB是免费的(但这并不重要,请参阅我的回答)。 “现在,这一切都意味着系统已达到极限”-不,一点也不。该系统具有用于缓存的6.9GiB,可以很容易地将其提供给应用程序,因此空间很大。此外,交换使用率非常低(大约50MiB)。如果内存开始变紧,交换使用率将上升。目前,您几乎没有使用一半的RAM。

–sleske
09年11月17日上午11:50

您是否考虑过在某个时候问一个新问题?

–womble♦
09年11月17日在13:27

我不同意,缓冲区/缓存行是系统的实际可用内存,因此如果您想知道系统是否有程序空间,则最相关。

–eckes
15年7月4日在15:27

#3 楼

当前接受的2009年答案已经过时。重要的是要确保所获取的信息正确无误,并且与free的版本(在Debian软件包procps中分发或在您的发行版中等效)匹配。查看man freeman 5 proc的输出也很有帮助,其中包含有关/proc/meminfo的信息,free是从Linux上获取free数据的文件。
默认情况下,-h的输出以kb为单位(1 kibibyte) = 1024字节),如您在手册页中所见。我更喜欢使用Mem参数,该参数显示后缀,如下所示:
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       6.1Gi       1.9Gi       301Mi       7.5Gi       8.8Gi
Swap:         979Mi          0B       979Mi

第一行total的意思是:


MemTotal(Mem):已安装的总内存(即SwapTotal加上/proc/meminfoused),这是RAM中的所有内存加上分配给Swap的内存。
br />
total - free - buffers - cache(Mem):未使用的内存(即freeMemFree),这是RAM和Swap中任何东西(甚至是缓存)未使用的所有内存。 Mem):这是主要用于SwapFreeshared

tmpfs(Mem),Shmembuff/cache的总和:
由内核缓冲区(buffers)使用,这是内核可以利用的内存。cache:页面高速缓存和平板使用的内存(buffersBuffers)。页面高速缓存包含高速缓存到RAM中的文件系统中文件的内容,因此,数量很多通常是一件好事。我认为“平板”是类似的缓存功能。



cache(Mem):这是对无需交换即可启动新应用程序的可用内存的估计。它包括Cached字段中计数的大部分内存(因为可以删除页面缓存以启动新应用程序),但是不计入交换(因为通常最好不要使用慢速交换空间)。

第二行是SReclaimable,无论出于什么原因,available页面都无法解释此行。这是我的解释:


cache(交换):这是为交换保留的磁盘空间总量。您可以通过检查它是否与Swap的输出匹配来进行检查。

man(交换):当前正在使用的交换磁盘空间量。再次,您可以通过将其与total的输出进行比较来进行检查(交换):当前未使用的交换磁盘空间量。等于swapon -s