温馨提示×

linux缓存是什么原理

小樊
46
2026-09-24 21:15:36
栏目: 智能运维

Linux 缓存(Cache)机制是操作系统用来提升性能、减少磁盘 I/O 的重要原理。下面从“是什么、为什么、怎么工作、怎么查看、如何清理”几个角度讲清楚。


一、Linux 缓存是什么?

在 Linux 中,常说的“缓存”主要指:

1. Page Cache(页缓存)

  • 用于缓存文件数据
  • 当你读/写文件时,数据先经过内存
  • 磁盘文件 → 内存 Page Cache → 进程

2. Buffer Cache(缓冲缓存)

  • 早期用于块设备(磁盘扇区)
  • 现代 Linux 中,buffer 主要缓存文件系统的元数据(如 inode、目录结构)

在 free 命令里你看到的:

  • buff/cache = buffer + cache

二、为什么需要缓存?(核心原理)

核心思想:

内存速度 >> 磁盘速度

  • 内存:纳秒级
  • 磁盘:毫秒级(慢 10⁵ 倍)

所以:

能不从磁盘读,就绝不从磁盘读


三、缓存工作流程(重点)

1️⃣ 读文件(Read)

进程读文件
   ↓
检查 Page Cache 是否有?
   ↓
有 → 直接返回(cache hit)
没有 → 从磁盘读 → 放入 cache → 返回

✅ 第一次慢,第二次快


2️⃣ 写文件(Write)

进程写文件
   ↓
写入 Page Cache(不立即写磁盘)
   ↓
标记为 dirty(脏页)
   ↓
后台线程定期刷盘(pdflush / writeback)

✅ 写操作“看起来”很快


四、缓存什么时候释放?

Linux 遵循原则:

缓存能占多少占多少,但内存紧张时自动回收

回收时机:

  • 应用程序需要内存
  • 系统内存不足(free < watermark)

回收策略:

  • LRU(最近最少使用)
  • 脏页先刷盘再回收

五、如何查看缓存?

1️⃣ free

free -h

看 buff/cache

2️⃣ top / htop

内存使用明细

3️⃣ /proc/meminfo

cat /proc/meminfo

关注:

  • Cached
  • Buffers
  • Dirty

六、缓存会“吃掉”内存吗?

✅ 会,但不是问题

  • 缓存占的内存是“可回收内存”
  • 不计入“真正使用”

所以:

  • 内存显示快满了 ≠ 内存不够
  • 真正看的是 available

七、如何手动清理缓存?(一般不建议)

# 清理 pagecache
echo 1 > /proc/sys/vm/drop_caches

# 清理 dentries/inodes
echo 2 > /proc/sys/vm/drop_caches

# 全部清理
echo 3 > /proc/sys/vm/drop_caches

⚠️ 仅用于:

  • 性能测试
  • 问题排查

八、常见误区

❌ 缓存越多越卡
✅ 缓存越多通常越快

❌ 必须定期清缓存
✅ 内核自己管理得很好

❌ buff/cache 是“浪费”
✅ 是“聪明地使用”


九、一句话总结

Linux 缓存的本质:用空闲内存换磁盘 I/O 性能,内存紧张时自动释放。

如果你愿意,我也可以讲:

  • Page Cache vs Buffer 的历史演变
  • OOM 与缓存的关系
  • 数据库为什么“怕”缓存
  • 容器 / K8s 中的缓存问题

你想深入哪一块?

0 踩