当前位置:首页>Linux>Linux 中的 buffer 与cache

Linux 中的 buffer 与cache

  • 2026-09-02 19:37:29
Linux 中的 buffer 与cache

关注+星标公众号,不容错过精彩

作者:HywelStar

在 Linux 性能分析中,buffer 和 cache 几乎是绕不开的话题。本章节将介绍这两个。none !important

1. buffer 和 cache 的定义与区别

2.1. Buffer(缓冲区)

Buffer 主要用于:块设备(block device)的 I/O 缓冲,优化磁盘写入性能。典型场景:none !important

  • • 磁盘写入前的临时存储
  • • 文件系统 metadata 操作
  • 特点:
  • • 面向“块设备”
  • • 更偏向 I/O 过程中的“中间态”

2.2. Cache(页缓存 / Page Cache)

Cache 主要用于:文件数据缓存,主要针对文件,加速文件读取。典型场景:none !important

  • • 文件读取加速
  • • 减少磁盘访问
  • 特点:
  • • 面向“文件内容”
  • • 用于提高读取性能

2.3. 核心区别

维度
Buffer
Cache
面向对象
块设备
文件数据
生命周期
短(I/O过程中)
较长(可复用)
作用
I/O缓冲
提高读取性能

2.4. 一个关键事实(必须知道)

在 Linux 内核中:none !important

Buffer 已经被 Page Cache 统一管理也就是说:none !important

  • • 二者在实现上已经融合
  • • free 里的 buff/cache 是合并统计

2. free 命令

free -h
total used free shared buff/cache available
Mem: 7.7Gi 2.5Gi 1.3Gi 643Mi 3.9Gi 4.3Gi
Swap: 0B 0B 0B

free显示系统内存的总使用量、可用量以及缓存和缓冲区的使用情况。

关键点:buff/cache 是“可回收”的,不是“被占死的内存”,在需要时会被释放;

真正关键指标是:available 表示: 在不影响系统性能的前提下,还能分配的内存。

一个常见误解:free 很少 = 内存不足,实际应该看 available

3. 性能调优

  1. 1. 判断是否真的内存不不足
free -hvmstat 1

关注:available 是否持续很低,另外一个是否频繁发生 swap

2. 观察 Page Cache 命中情况sar -B

关注:内存与缓存的命中率

pgpgin / pgpgoutfault / majflt如果 major fault 很多,说明频繁访问磁盘(cache 不够)3. 判断是否发生内存压压力none !important

vmstat 1

关注:si/so(swap in/out)wa(IO wait)

 4. 典型问题与分析思路

场景 1:系统很卡,但 CPU 不高排查方向:是否 IO 瓶颈Page Cache 是否频繁失效none !important

iostat -x 1

场景 2:内存“看起来满了”

正确判断:看 available,看是否发生 swap场景 3:频繁读磁盘

可能原因:cache 太小,数据集远大于内存优化思路:增加内存优化访问模式(顺序读 vs 随机读)

 5. 调优建议

  1. 1. 不要轻易清 cache
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

适用于:benchmark 、 测试不适用于:线上长期优化原因:会降低性能(失去缓存)

2. 合理调整 dirty 参数none !important

sysctl -a | grep dirty

关键参数:vm.dirty_ratiovm.dirty_background_ratio作用:控制“脏页刷盘时机”调优方向:IO 密集型系统 → 降低 、 吞吐优先 → 可以提高

3. 减少不必要的缓存污染例如大文件一次性扫描:O_DIRECT或:posix_fadvise()

4. 控制 swap 使用vm.swappiness建议:数据库:10~20普通系统:60(默认)

 6. 实用调试套路

Step 1:看整体none !important

free -h

Step 2:看动态none !important

vmstat 1

Step 3:看 IOnone !important

iostat -x 1

Step 4:看 cache 行为none !important

sar -B

7. 总结

     Buffer 和 Cache 本质都是为了提升 IO 性能,在 Linux 中已经统一到 Page Cache,cache 占用高是正常现象,调优重点不在“清 cache”,而在观察内存压力,理解 IO 行为,调整内核参数,最后一句Linux 不是在“占用你的内存”,而是在“帮你把内存用到极致”。

往期推荐

嵌入式工程师都该懂一点安全

面试技巧-2.注意要点

嵌入式中动态库路径的那些坑

嵌入式开发中常用存储认识

为什么Linux驱动会自动匹配?

设备树:每一个 Linux 驱动工程师的起点

嵌入式软件开发求职指南

嵌入式系统 OTA 固件升级

A/B 分区 OTA 升级机制与 U-Boot 实现

Bootloader从启动到内核记录

2026 AI编程入门的基础概念

嵌入式Linux驱动开发常见坑

戳“阅读原文”一起来充电吧!

最新文章

随机文章