温馨提示×

linux缓存怎么工作

小樊
37
2026-10-27 01:32:19
栏目: 智能运维

Linux 的缓存(Cache)机制是内核用来提升系统性能的重要手段,核心思想是**“用内存换速度”**:把磁盘中的数据先放到内存里,下次访问就快很多。

下面从是什么、怎么工作、关键机制、如何查看和清理几个方面讲清楚。


一、Linux 缓存是什么

在 Linux 中,常见的“缓存”主要有两类:

1. Page Cache(页缓存)

  • 用于文件数据
  • 当你读/写文件时,数据先经过内存中的 page cache
  • 属于文件系统缓存

示例:

cat bigfile.txt

第一次慢(读磁盘),第二次快(读内存)

2. Buffer Cache(缓冲区缓存)

  • 早期用于块设备(磁盘裸设备)
  • 现在在 Linux 中已基本合并进 page cache
  • 主要用于元数据(inode、目录等)

在 free 命令里你会看到:

  • buff/cache = buffer + cache

二、Linux 缓存怎么工作(核心流程)

1. 读文件(Read)

用户程序
   ↓
VFS
   ↓
Page Cache  ← 命中?直接返回
   ↓ 未命中
磁盘 I/O
   ↓
写入 Page Cache
   ↓
返回用户

2. 写文件(Write)

Linux 默认是写回(write-back)模式:

用户 write()
   ↓
写入 Page Cache
   ↓
标记为 dirty(脏页)
   ↓
后台 flusher 线程定时写回磁盘

好处:

  • 写操作快
  • 合并多次写,减少磁盘 I/O

风险:

  • 断电可能丢数据(未写回部分)

三、脏页(Dirty Pages)与回写

脏页是什么

  • 内存中已修改,但磁盘上还没更新的数据

回写触发条件

  1. 时间到了(dirty_expire_centisecs)
  2. 脏页太多(dirty_ratio)
  3. 内存紧张
  4. 手动 sync

相关参数:

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

四、内存紧张时怎么办(回收机制)

当内存不足时,Linux 会:

  1. 优先回收 cache
  2. 再考虑 swap
  3. 最后 OOM Killer

✅ 所以:cache 内存是可回收的,不算“真正占用”


五、如何查看缓存

1. free

free -h

关注:

buff/cache
available

2. top / htop

  • 看内存占用结构

3. /proc/meminfo

cat /proc/meminfo

重点:

  • Cached
  • Buffers
  • Dirty

六、如何手动清理缓存(不推荐随便用)

# 清理 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 占用太多,系统卡了” ✅ 其实它是被系统聪明地利用

❌ “free 内存越少越危险” ✅ Linux 的设计就是:空闲内存 = 浪费内存


八、一句话总结

Linux 缓存通过 Page Cache + 写回机制,把磁盘 I/O 变成内存操作,大幅提升性能;缓存内存可回收,是系统正常工作的一部分。

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

  • cache 与 swap 的关系
  • 数据库为什么怕 cache 污染
  • 如何调优 dirty 参数
  • 容器 / Kubernetes 中的缓存问题

0 踩