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

作者:HywelStar
在 Linux 性能分析中,buffer 和 cache 几乎是绕不开的话题。本章节将介绍这两个。none !important
Buffer 主要用于:块设备(block device)的 I/O 缓冲,优化磁盘写入性能。典型场景:none !important
Cache 主要用于:文件数据缓存,主要针对文件,加速文件读取。典型场景:none !important
在 Linux 内核中:none !important
Buffer 已经被 Page Cache 统一管理也就是说:none !important
free 里的 buff/cache 是合并统计free -h
total used free shared buff/cache available
Mem: 7.7Gi 2.5Gi 1.3Gi 643Mi 3.9Gi 4.3Gi
Swap: 0B 0B 0Bfree显示系统内存的总使用量、可用量以及缓存和缓冲区的使用情况。
关键点:buff/cache 是“可回收”的,不是“被占死的内存”,在需要时会被释放;
真正关键指标是:available 表示: 在不影响系统性能的前提下,还能分配的内存。
一个常见误解:free 很少 = 内存不足,实际应该看 available
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)
场景 1:系统很卡,但 CPU 不高排查方向:是否 IO 瓶颈Page Cache 是否频繁失效none !important
iostat -x 1
场景 2:内存“看起来满了”
正确判断:看 available,看是否发生 swap场景 3:频繁读磁盘
可能原因:cache 太小,数据集远大于内存优化思路:增加内存优化访问模式(顺序读 vs 随机读)
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(默认)
Step 1:看整体none !important
free -hStep 2:看动态none !important
vmstat 1Step 3:看 IOnone !important
iostat -x 1Step 4:看 cache 行为none !important
sar -BBuffer 和 Cache 本质都是为了提升 IO 性能,在 Linux 中已经统一到 Page Cache,cache 占用高是正常现象,调优重点不在“清 cache”,而在观察内存压力,理解 IO 行为,调整内核参数,最后一句Linux 不是在“占用你的内存”,而是在“帮你把内存用到极致”。
往期推荐
嵌入式工程师都该懂一点安全
面试技巧-2.注意要点
嵌入式中动态库路径的那些坑
嵌入式开发中常用存储认识
为什么Linux驱动会自动匹配?
设备树:每一个 Linux 驱动工程师的起点
嵌入式软件开发求职指南
嵌入式系统 OTA 固件升级
A/B 分区 OTA 升级机制与 U-Boot 实现
Bootloader从启动到内核记录
2026 AI编程入门的基础概念
嵌入式Linux驱动开发常见坑
戳“阅读原文”一起来充电吧!