当我们使用free命令查看Linux系统内存使用情况时,会发现内存使用一直处于较高的水平,即使此时系统并没有运行多少软件。这正是Windows和Linux在内存管理上的区别,乍一看,Linux系统吃掉我们的内存(Linux ate my ram),但其实这也正是其内存管理的特点。
下面为使用free命令查看结果
$<2>$ free -m
total used free shared buffers cached
Mem: 3834 2952 882 0 2 2096
-/+ buffers/cache: 852 2981
Swap: 3074 23 3051
输出的第二行表示系统内存的使用情况:
Mem: total(总量)= 3834MB,
used(已使用)= 2952MB,
free(空闲)= 882MB,
shared(共享内存)= 0MB,
buffers = 2MB,
cached = 882MB
注:前面四项都比较好理解,buffer 和 cache找不到合适的词来翻译,它们的区别在于:
A buffer is something that has yet to be “written” to disk.
A cache is something that has been “read” from the disk and stored for later use.
即buffer用于存放要输出到磁盘的数据,而cache是从磁盘读出存放到内存中待今后使用的数据。这块内存从操作系统的角度确实被使用,但如果用户要使用,这块内存是可以很快被回收被用户程序使用,因此从用户角度这块内存应划为空闲状态。它们的引入均是为了提供IO的性能。
输出的第三行表示在第二行的基础上-/+ buffers/cache得到的:
– buffers/cache used = Mem used – buffers – cached = 2952MB – 2MB – 2096MB = 852MB
+ buffers/cache free = Mem free + buffers + cached = 882MB + 2MB + 2096MB = 2981MB
操作系统把内存分为三部分:
1、已经被应用使用部分。
2、操作系统用来IO缓冲,可以被释放给应用使用部分。即free命令中”buffers/cached”的内存。
3、未被使用部分。
实验证明:
dd if=/dev/zero of=bigfile bs=1M count=1000du -h bigfileecho 3 | tee /proc/sys/vm/drop_cachesfree -mtime cat bigfile > /dev/nullfree -mtime cat bigfile > /dev/nullfree -m