Linux的free 命令相对于top命令提供了更简洁的查看系统内存使用情况
free:
或free -h:
Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况
使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。
total1:表示物理内存总量;
used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用;
free1:未被分配的内存;
shared1:共享内存,一般系统不会用到;
buffers1:系统分配但未被使用的buffers 数量,注意这不是总量,而是未使用的量;
cached1:系统分配但未被使用的cache 数量;
used2:实际使用的buffers 与cache 总量,这才是实际使用的内存总量;
free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
满足如下公式:
total1 = used1 + free1(物理内存总量=分配给缓存的内存+未分配的内存)
total1 = used2 + free2(物理内存总量=实际使用的内存+未被使用的内存)
used1 = buffers1 + cached1 + used2(分配给缓存的内存=分配但未使用的buffer+分配但未使用的cache+实际使用的内存)
free2 = buffers1 + cached1 + free1(可用内存=分配单未使用的buffer+分配但未使用cache+未分配的内存)
buffer与cache的区别:
1. Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚用过的数据或循环使用的部分数据,这时从Cache中读取数据会更快,减少了CPU等待的时间,提高了系统的性能。
Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。
2. Buffer:缓冲区,用于存储速度不同步的设备或优先级不同的设备之间传输数据;通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。
Buffer一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。
Free中的buffer和cache:(它们都是占用内存):
buffer : 作为buffer cache的内存,是块设备的读写缓冲区
cache: 作为page cache的内存, 文件系统的cache
参考资料:
http://blog.chinaunix.net/uid-78363-id-2039911.html
http://blog.csdn.net/caoshuming_500/article/details/7332561
http://www.cnblogs.com/kgdxpr/archive/2012/04/14/2446900.html