今天有朋友提起Linux下free命令里buffer和cache的区别,刚好,也记录一下
先看一下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表示的是实际还可以挪用的内存

最后一行是swap的信息,略