free命令中buffers和caches的区别
一、命令
1
2
3
4
5
|
# free -m
shared buffers cached
Mem: 7869 7651 218 1 191 5081
: 2378 5490
Swap: 478 139 339
|
二、计算
这里使用1、2 分别代表第一行和第二行的数据
1
2
3
4
5
6
7
8
|
total1:表示物理 内存总量
used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用
free1:未被分配的内存
shared1:共享内存,一般系统不会用到,这里也不讨论
buffers1: 系统分配但未被使用的buffers 数量
cached1:系统分配但未被使用的cache 数量
used2:实际使用的buffers 与cache 总量,也是实际使用的内存总量
free2:未被 使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存
|
可以整理出如下等式
1
2
3
4
|
total1 = used1 + free1
total1 = used2 + free2
used1 = buffers1 + cached1 + used2
free2 = buffers1 + cached1 + free1
|
具体计算
1
2
3
4
|
7869 = 7651 + 218
#7868基本相等,因为有shared)
#7650 基本相等,因为有shared)
5490 = 191 + 5081 + 218
|
为什么这样计算呢,因为buffers和cache其实也是内存的一部分,这部分特殊的内存是可以回收的,甚至如果需要我们还可以将这部分buffers和cache给释放出来
三、区别
1、page cahe和buffer cache
2、cache 和 buffer的区别
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 ; 对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存
它是根据程序的局部性原理而设计的,就是cpu执行的指令和访问的数据往往在集中的某一块,所以把这块内容放入cache后,cpu就不用在访问内存了,这就提高了访问速度。当然若cache中没有cpu所需要的内容,还是要访问内存的
查看CPU的 L1、L2、L3
1
2
3
4
5
6
|
# ll /sys/devices/system/cpu/cpu0/cache/
total 0
#一级cache中的data和instruction cache
#一级cache中的data和instruction cache
#二级cache,共享的
#三级cache,共享的
|
如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO 必会非常小
如何释放Cache Memory
1
2
3
4
5
6
7
8
|
pagecache:
/proc/sys/vm/drop_caches
dentries and inodes:
/proc/sys/vm/drop_caches
pagecache, dentries and inodes:
/proc/sys/vm/drop_caches
#注意,释放前最好sync一下,防止丢失数据,但是一般情况下没有必要手动释放内存
|
4、总结
cached是cpu与内存间的,buffer是内存与磁盘间的,都是为了解决速度不对等的问题
-
缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除
-
缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期 清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的MP3,但U盘的灯 没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟
-
修改/etc/sysctl.conf中的vm.swappiness右边的数字可以在下次开机时调节swap使用策略。该数字范围是0~100,数字越大越倾向于使用swap。默认为60,可以改一下试试。–两者都是RAM中的数据