性能·内存 / 命令文档
Linux 页缓存与缓冲区
概述
深入理解内存管理的核心机制
页缓存 (Page Cache)
缓存文件系统数据以页为单位(4KB)提升文件读写性能
缓冲区 (Buffer Cache)
缓存块设备元数据以块为单位优化磁盘块访问
应用程序
页缓存
缓冲区
磁盘
核心价值
性能提升:将频繁访问的数据保存在内存中,避免昂贵的磁盘I/O操作,读取速度提升数百倍。
写入优化:通过延迟写入(delayed write)机制,将多个小写操作合并为大块写入,减少磁盘寻道时间。
系统稳定:平滑I/O负载波动,防止磁盘瓶颈影响系统整体性能。
资源利用:充分利用系统空闲内存,实现内存资源的最大化价值。
关联关系
统一管理:现代Linux中,页缓存和缓冲区已统一为页缓存层,但概念上仍有区分。
数据流向:文件数据 → 页缓存 → 缓冲区 → 磁盘块设备
内存分配:两者共享系统可用内存,由内核动态调节比例。
回写机制:脏页会定期或在内存不足时写回磁盘,保证数据一致性。
关键理解:页缓存关注文件内容,缓冲区关注磁盘元数据(如inode、目录结构)。
监控命令
free -h
查看缓存使用情况,关注 buff/cache 列
cat /proc/meminfo | grep -E "(Cached|Buffers)"
详细查看缓存内存分布
vmstat 1
实时监控I/O活动和缓存变化
iotop -o
查看进程I/O使用情况,判断缓存效果
清理操作
echo 1 > /proc/sys/vm/drop_caches # 清理页缓存
echo 2 > /proc/sys/vm/drop_caches # 清理目录项和inode缓存
echo 3 > /proc/sys/vm/drop_caches # 清理所有缓存
性能调优
echo 10 > /proc/sys/vm/dirty_ratio
设置脏页占总内存的最大比例
echo 5 > /proc/sys/vm/dirty_background_ratio
设置后台回写进程启动的脏页比例
运维要点
清理缓存风险:不要随意清理缓存!这会导致性能急剧下降,系统需要重新从磁盘加载数据。只在内存泄漏诊断时使用。
内存不足误判:free命令显示的buff/cache是可回收内存,不是内存不足的标志。关注available列。
最佳实践: • 监控 dirty_ratio 避免写入阻塞 • 关注磁盘I/O等待时间(wa%) • 使用SSD时可适当调高 dirty_ratio • 定期检查大文件是否占用过多缓存
性能指标: • 缓存命中率 > 90% 为良好 • I/O等待时间 < 10% 为正常 • 脏页回写频率稳定无阻塞