1|0缓存
从 free 命令可以看到,缓存其实就是 Buffer 和 Cache 两部分的总和 字面意思,Buffer 是缓存区,Cache 是缓存,两者都是数据再内存中的临时存储
2|0Buffer 和 Cache 的区别man free执行上面的命令,可以从帮助手册中看到 buffer 和 cache 说明 Buffers:内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值 Cache:内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和
注意事项同一个指标的具体含义,就可能因为内核版本、性能工具版本的不同而有挺大差别 所以百度 Buffer 和 Cache 什么意思可能并不适用于你当前的环境 所以可以通过下面说的 proc 文件系统来确认它们的含义
3|0proc 文件系统再次回顾 proc/proc 是 Linux 内核提供的一种特殊文件系统,是用户跟内核交互的接口 比方说,用户可以从 /proc 中查询内核的运行状态和配置选项, 查询进程的运行状态、统计数据等,也可以通过 /proc 来修改内核的配置 proc 文件系统同时也是很多性能工具的最终数据来源
3|1了解 Buffer 和 Cache查看帮助文档,找到它们 man proc
Buffers对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大 (20MB 左右) 内核就可以把分散的写集中起来,统一优化磁盘的写入,比如,可以把多次小的写合并成单次大的写等等
Cached从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据 这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘。
SReclaimableSlab 包括两部分,其中的可回收部分,用 SReclaimable 记录;而不可回收部分,用 SUnreclaim 记录
灵魂拷问
为了验证上面的问题,会通过案例来展开描述
4|0Buffer 和 Cache 在不同场景下的使用情况系统配置预先安装 sysstat 包 apt install sysstat
4|1前期准备为了减少缓存的影响,在第一个终端中,运行下面的命令来清理文件页、目录项、Inodes 等各种缓存 echo 3 > /proc/sys/vm/drop_caches
5|0场景一:磁盘和文件写案例5|1文件写场景第一个终端运行 vmstatvmstat 1 |