linux 命令 free -m详解

 先看一下free命令的输出<我这里是gentoo linux>:

total       used       free     shared    buffers     cached
Mem:       2586752    2098752     488000          0     160032     890292
-/+ buffers/cache:    1048428    1538324
Swap:      1060248          0    1060248

我们先看一下第一/二行各字段表示的意思:
total: 内存总数2586752
used: 已经使用的内存2098752
free: 空闲内存数488000
shared: 当前废弃不用内存,0
buffers: 缓冲内存数160032
cached: 缓存数890292

其中total = used + free

那么,buffer和cache的区别是什么呢?用简单两句话来说:
buffer is for writting
cache is for reading

下面这两句是我从网上找到的,应该不难理解

Buffers
Are used by programs with active I/O operations, i.e. data waiting to be
written to disk

Cache
Is the result of completed I/O operations, i.e. buffers that have been
flushed or data read from disk to satisfy a request.

接着我们再看第三行的

-/+ buffers/cache:    1048428    1538324

这个-/+分别是什么意思呢?先看一下这个公式:

- buffers/cache = used – buffers – cached = 1048428
+ buffers/cache = free + buffers + cached = 1538324

这样就好理解了:
-buffers/cache表示的是实际上被程序上真正吃掉的内存
+buffers/cache表示的是实际还可以挪用的内存

 

关系说明

查看内存情况最常用的是free命令:

shell> free -m

                               total     used     free   shared    buffers     cached 

Mem:                     32101   29377    2723          0           239      25880 

-/+ buffers/cache:       3258     28842 

Swap:                     2047     0            2047

新手看到used一栏数值偏大,free一栏数值偏小,往往会认为内存要用光了。其实并非如此,之所以这样是因为每当我们操作文件的时 候,Linux都会尽可能的把文件缓存到内存里,这样下次访问的时候,就可以直接从内存中取结果,所以cached一栏的数值非常的大,不过不用担心,这 部分内存是可回收的,操作系统的虚拟内存管理器会按照LRU算法淘汰冷数据。还有一个buffers,也是可回收的,不过它是保留给块设备使用的。

知道了原理,我们就可以推算出系统可用的内存是free + buffers + cached:

shell> echo $((2723 + 239 + 25880))28842

至于系统实际使用的内存是used – buffers – cached:

shell> echo $((29377 - 239 - 25880))3258