Linux

一文看懂 Linux 的 Buffer 和 Cache,到底有啥区别?

转载:一文看懂 Linux 的 Buffer 和 Cache,到底有啥区别?

“为啥我 free 命令看内存用得这么多,但系统却不慢?”
“Buffer 和 Cache 是不是都可以释放?”
“Linux 是不是偷了我的内存?”

很多刚接触 Linux 的人看到系统内存的使用情况时,都会一脸疑惑。
今天这篇文章,就来一次性讲清楚——Buffer 和 Cache 到底有啥区别?

  

🔍 一、先看 free 命令输出


$ free -h
              total        used        free      shared  buff/cache   available
Mem:           16Gi       2.3Gi       1.2Gi       200Mi        12Gi        13Gi

你可能会惊讶地发现:

    🤔 “怎么我 16G 的内存,buff/cache 就占了 12G?!”

别急,其实这是 Linux 的“聪明用法”,并不代表真的占用。

 

🧱 二、什么是 Buffer?


✅ Buffer 是为了加速“写磁盘”!

  • • 数据写入磁盘通常比较慢
  • • Linux 会先把写入数据暂时存放在内存中(就是 Buffer)
  • • 等待系统空闲时,批量写入磁盘(提高性能)

📌 举个例子:

你 cp 了一个大文件,Linux 先放到 Buffer 里,等稍后一起写到硬盘。

 

🧠 三、什么是 Cache?


✅ Cache 是为了加速“读磁盘”!

  • • 如果你访问过某个文件,Linux 会把它缓存到内存中
  • • 下次访问时,直接从内存中读取,速度飞快
  • • 这部分就是 Page Cache,通常就叫 Cache

📌 举个例子:

你 cat 了一个日志文件,Linux 会把它缓存到 Cache 中,下一次就不再从磁盘读。

 

🔍 四、Buffer 和 Cache 的本质区别


对比项BufferCache
主要作用写入数据的临时缓冲区读取数据的缓存区
使用场景写磁盘优化读磁盘优化
类型块设备缓存(block device)文件系统缓存(page cache)
生命周期写入完就可以释放可能长期驻留,直到内存紧张
是否可释放是,系统会根据内存压力动态回收是,回收机制同样存在

 

🧪 五、你可以手动释放它们


# 同时释放 Page Cache、目录项和 inode
sudo sync; echo 3 > /proc/sys/vm/drop_caches
参数值含义
1释放页缓存(Page Cache)
2释放目录项和 inode
3同时释放 Page Cache 和 Buffer

 

⚠️ 注意:这不是优化手段,不建议频繁使用,仅用于调试或测试。

 

🧰 六、怎么判断 Cache 有没有效果?


使用 vfsstat 或 iostat 工具可以看到实际命中率:

# 查看磁盘的读写情况
iostat -x 1

# 查看文件系统命中率
cat /proc/meminfo | grep -E 'Cached|Buffers'

你会发现,其实很多文件第二次访问时几乎不再走磁盘,性能提升巨大。

 

总结


✅ Buffer 是“写磁盘”的中转站,Cache 是“读磁盘”的加速器。

✅ 看似占了很多内存,其实是 Linux 利用了“闲置内存”来加速系统性能。