Linux的free命令以及cache与buffer的区别

来源:互联网 发布:java nio长连接实现 编辑:程序博客网 时间:2024/06/06 14:04

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


原创粉丝点击