温馨提示×

linux缓存是什么机制

小樊
33
2026-10-03 14:45:51
栏目: 智能运维

在 Linux 中,“缓存机制”通常不是指某一种技术,而是一整套利用内存来加速磁盘 / 网络 / 计算访问的机制。下面从核心概念 → 主要机制 → 关键原理 → 常见误区来讲。


一、Linux 缓存的核心目标

用空闲内存换性能

内存比磁盘快几个数量级,Linux 会尽量把“可能再用到的数据”放在内存里。


二、最常见的几种缓存机制

1️⃣ Page Cache(页缓存)【最重要】

作用:缓存文件内容(磁盘数据)

  • 读文件 → 先查 Page Cache
  • 写文件 → 先写 Page Cache(默认)
  • 由内核自动管理
用户进程
   ↓
VFS
   ↓
Page Cache(内存)
   ↓
磁盘

特点

  • 对所有文件系统通用
  • 占用的是“空闲内存”
  • 可被随时回收

2️⃣ Buffer Cache(缓冲区缓存)

作用:缓存块设备元数据 / 裸设备

  • 早期独立存在
  • 现在已合并进 Page Cache
  • 主要缓存:inode、superblock、磁盘块

你在 free 命令里看到的 buffers 就是它


3️⃣ dentry / inode cache(目录项缓存)

作用:加速路径解析

ls /a/b/c/file
  • dentry cache:缓存目录结构
  • inode cache:缓存文件元信息

✅ 极大加速 stat()、open()


4️⃣ Slab Cache(内核对象缓存)

作用:缓存内核常用对象

  • task_struct
  • inode
  • dentry
  • socket

工具查看:

slabtop

5️⃣ 写缓存(Writeback 机制)

Linux 写文件不是立刻写盘

模式 行为
writeback 先写内存,后台异步刷盘(默认)
sync 立刻写盘
direct IO 绕过缓存

刷盘由这些控制:

/proc/sys/vm/dirty_ratio
/proc/sys/vm/dirty_background_ratio

6️⃣ 其他缓存

  • Swap cache:交换分区缓存
  • net cache:socket buffer、TCP 缓存
  • FS-specific cache:如 NFS cache

三、Linux 如何管理缓存(关键机制)

✅ 1. LRU + 二次机会

  • 最近最少使用
  • 避免“一次性大文件”清掉热缓存

✅ 2. 内存紧张时自动回收

free memory ↓
→ 回收 page cache
→ 不杀进程(除非 OOM)

✅ 3. 文件映射(mmap)

  • 文件直接映射到内存
  • 同样走 Page Cache

四、你看到的“缓存”在哪?

free -h
              total        used        free      shared  buff/cache   available
Mem:           16G         4G          2G         200M        10G         11G
  • buff/cache ≈ Page Cache + Buffer
  • available ≈ 真正可用内存

五、常见误区 ❌

❌ “buff/cache 占用内存,要清掉”

✅ 错误
那是被借用的内存,不用就浪费


❌ “手动清缓存能提速”

echo 3 > /proc/sys/vm/drop_caches

✅ 只用于调试
✅ 生产环境一般不要


❌ “缓存不会丢数据”

✅ 写缓存未刷盘 + 断电 = 可能丢数据


六、一句话总结

Linux 缓存 = 用内存缓存文件、元数据和内核对象,通过 Page Cache + Writeback + LRU 自动管理,极大提升性能且不浪费内存。

如果你愿意,我也可以:

  • 用一张图讲清 Page Cache
  • 讲 OOM 与缓存的关系
  • 对比 Linux vs Windows 缓存机制
  • 讲 数据库为什么要绕过缓存(direct IO)

你想深入哪一块?

0 踩