温馨提示×

linux缓存有何区别

小樊
37
2026-10-21 02:46:28
栏目: 智能运维

在 Linux 里经常会听到各种“缓存(cache)”,但它们所处层级、作用、是否可释放差别很大。下面按常见分类系统说明。


一、按“是否占用内存”划分

1. Page Cache(页缓存)【最常见】

位置:内存(RAM)
作用:缓存文件系统的文件内容(磁盘 → 内存)
特点:

  • 读文件时优先从内存读
  • 写文件先写 cache,再由内核刷盘(writeback)
  • 可被回收(内存紧张时自动释放)

查看方式:

free -h
# buffers/cache 或 buff/cache

特点总结: ✅ 提升 IO 性能
✅ 不丢数据(最终会写盘)
✅ 可回收


2. Buffer Cache(缓冲区缓存)

位置:内存
作用:缓存“块设备”的原始块(如磁盘扇区)

现代 Linux 中:

  • buffer 基本已合并进 page cache
  • free 里看到的 buffers 多是元数据(inode、目录等)

二、按“硬件层级”划分

3. CPU Cache(L1 / L2 / L3)

位置:CPU 内部
作用:缓存内存数据,加速 CPU 访问

特点:

  • 对用户态程序透明
  • 不可手动管理
  • 与文件系统无关

查看:

lscpu | grep -i cache

4. Disk Cache(磁盘自身缓存)

位置:硬盘 / SSD 控制芯片
作用:硬盘内部读写缓冲

风险:

  • 突然断电可能丢数据(尤其 HDD)
  • 可通过 fsync / barrier 控制

三、按“用户态 vs 内核态”划分

5. 应用层缓存(如 Redis、MySQL Buffer Pool)

位置:用户进程内存
作用:业务级缓存

特点:

  • 不归内核管
  • 释放需应用自己处理
  • OOM 风险高

6. dentry / inode cache

位置:内核内存
作用:缓存目录项和 inode

效果:

  • ls 快
  • stat 快

查看:

slabtop

四、对比总结表

类型 位置 是否可回收 是否丢数据 管理方
Page Cache 内存 ✅ ❌ 内核
Buffer Cache 内存 ✅ ❌ 内核
CPU Cache CPU ❌ ❌ 硬件
Disk Cache 硬盘 ❌ ⚠️ 硬件
应用缓存 进程 ❌ ❌ 应用
dentry/inode 内核 ✅ ❌ 内核

五、常见误区

  • ❌ “buff/cache 是浪费内存”
    ✅ 实际是空闲内存的再利用
  • ❌ “清 cache 能提速”
    ✅ 反而可能更慢
  • ❌ “cache 会丢数据”
    ✅ 正常关机不会

如果你是想问:

  • 性能优化
  • OOM 原因
  • 为什么 free 很小
  • 容器 / 数据库场景

可以告诉我具体场景,我可以针对性讲。

0 踩