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