内存中的Buffer和Cache
这个界⾯包含了物理内存Mem和交换分区Swap的使⽤情况,其中包括以⽤内存、缓存、可⽤内存等。其中缓存是buffer和cache这两部分的总和。
从字⾯意思理解,Buffer和Cache分别代表缓冲区和缓存的意思,⼆者都是数据再内存中的临时存储。
古剑奇谭2攻略 Buffers是内核缓冲区⽤到的内存,对应的是/proc/meminfo种得buffers值
Cache是内核页缓存和Slab⽤到的内存,对应的是/proc/meminfo种得Cache与SReclaimable之和
Buffers是对原始磁盘的临时存储,也就是⽤来缓存磁盘的数据,通常不会特别⼤(20MB左右),这样内核就可以把分散的写集中起来,统⼀优化磁盘的写⼊,⽐如可以把多次⼩的写合并成单次⼤的写
Cached是从磁盘读取⽂件的页缓存,也就是⽤来缓存从⽂件读取的数据,下次访问这些⽂件数据的时候,就可以从内存中快速的读取,⽽不需要每次缓慢的从磁盘读读取。
SReclaimable 是 Slab 的⼀部分。Slab 包括两部分,其中的可回收部分,⽤ SReclaimable 记录;⽽不可回收部分,⽤ SUnreclaim 记录。
通过实例来理解Buffers和Cached
辣椒怎么写
哺乳时间⼀台服务器,分别都是1核2G
为了减少其他缓存的影响,需要执⾏echo 3 > /proc/sys/vm/drop_caches
1、⾸先再⼀个终端上运⾏vmstat命令
此处的buff和cache就是之前说到的Buffers和Cached,单位是KB
bi和bo分别表⽰设备读取和写⼊的⼤⼩,单位是快/秒。因为Linux中快的⼤⼩是1KB,所以这个单位也就等价于KB/s
琼中
系统再空闲的时候,这⼏个值应该是不变的
再第⼆个终端执⾏命令:dd if=/dev/urandom of=/tmp/file bs=1M count=500
通过读取随机设备,⽣产⼀个500M的⽂件
通过结果可以看出,buff基本没怎么变,但是cache却有⼀个明显的下滑,再逐步上升
画家简介 再进⾏进⼀步分析发现,再Cache刚开始变化的时候,bo依旧是0,⼀段时间之后,出现了⼤量块设备写。然后再dd结束的时
候,Cache不在增长,多次I/O写得结果加起来,才是dd要写的500M数据
问题1:Cache是从磁盘读取⽂件的页缓存,为什么再写⼊⽂件的时候也会使⽤到它?
写⽂件的时候会⽤到Cache缓存数据,写磁盘的时候会⽤到Buffer来缓存数据,所以,虽然Cache是⽂件读的缓存,但是实际
上,Cache也会缓存写⽂件的数据。
磁盘和⽂件读案例
反过来看,磁盘、⽂件读取时是如何⼀个表现安徽天柱山>梦见尿床
⾸先还是清空缓存
echo 3 > /proc/sys/vm/drop_caches
运⾏⽂件读取命令
dd if=/tmp/file of=/dev/null
回到终端1观察内存和I/O的变化
观察vmstat时,发现在⽂件读取的开始时buff⼏乎没有变化,但是cache再不断增加。bi写⼊的⼤⼩也会在dd结束之后达到1G,这与之前说的“Cache 是对⽂件读的页缓存”是⼀致的
结束的英文短语总结:
Buffer是对磁盘数据的缓存,⽽Cache是对⽂件数据的缓存,他们既会⽤在读请求中,也会⽤在写请求中