目录标题
- 🔍 一、Page Cache 是什么?
- ✅ 定义
- 🧠 二、为什么需要 Page Cache?
- 📚 类比
- 🚀 优势
- 📂 三、Page Cache 如何工作?
- 🟢 读文件(read)
- 🟠 写文件(write)
- 📊 四、如何查看 Page Cache 使用情况?
- 🧽 五、如何释放 Page Cache?
- ⚠️ 注意:释放 cache 会导致性能下降,建议只在特殊情况下使用(比如测试或紧急释放内存)
- 💡 六、Page Cache 与 Buffer Cache 的区别?
- ✅ 总结
页缓存(Page Cache)是 Linux 内核中用来缓存文件内容的机制,它能极大地提升文件读写性能,减少对磁盘的访问。
🔍 一、Page Cache 是什么?
✅ 定义
Page Cache 是 Linux 内存中的一部分,用来缓存从 磁盘读取的文件数据,或者待写入磁盘的数据。
- 它以“页(Page)”为单位管理,一般是 4KB 大小。
- 属于 Linux 的 统一缓冲高速缓存系统(Unified Buffer Cache)。
🧠 二、为什么需要 Page Cache?
📚 类比
就像浏览器会缓存网页,避免每次都从服务器重新加载,Page Cache 让系统避免频繁地访问慢速磁盘。
🚀 优势
作用 | 描述 |
---|---|
提高文件访问速度 | 读取频繁的文件可直接从内存中命中 |
减少磁盘 IO | 减少机械硬盘或 SSD 的读写次数,延长寿命 |
提升系统整体性能 | 所有文件系统操作的响应变快 |
📂 三、Page Cache 如何工作?
🟢 读文件(read)
-
程序通过
read()
系统调用请求读取文件。 -
内核先查 Page Cache:
- ✅ 如果命中缓存(缓存命中),直接从内存读取。
- ❌ 如果未命中,从磁盘读取数据,并保存到 Page Cache。
-
下次读取同样文件,就能命中缓存。
🟠 写文件(write)
- 程序调用
write()
,写入文件时,不是立即写入磁盘。 - 数据被写入 Page Cache 中的“脏页(Dirty Pages)”。
- 后续由 内核的回写线程(如 pdflush 或 kswapd),在合适时间将脏页刷入磁盘。
📊 四、如何查看 Page Cache 使用情况?
free -h
输出示例:
total used free shared buff/cache available
Mem: 32Gi 4Gi 2Gi 1Gi 26Gi 27Gi
buff/cache
就包含了 Page Cache(以及 Buffer Cache)。
🧽 五、如何释放 Page Cache?
⚠️ 注意:释放 cache 会导致性能下降,建议只在特殊情况下使用(比如测试或紧急释放内存)
# 只释放 page cache
echo 1 > /proc/sys/vm/drop_caches
# 释放 page cache + dentries 和 inodes
echo 3 > /proc/sys/vm/drop_caches
配合:
sync
可确保先将脏数据写入磁盘。
💡 六、Page Cache 与 Buffer Cache 的区别?
项目 | Page Cache | Buffer Cache |
---|---|---|
缓存对象 | 文件内容 | 块设备元数据(如超级块、inode) |
常见应用 | 文件系统读取 | 写入 ext 系统元数据、日志系统 |
内核策略 | 更大 | 更小(通常较少) |
✅ 总结
特性 | 描述 |
---|---|
是什么 | 用于缓存文件内容的内存 |
优点 | 加快读写,减少磁盘压力 |
缓存方式 | 自动管理、基于页(通常4KB) |
清理方式 | 可通过 echo 1/2/3 > drop_caches 手动清理 |
查看 | free -h 、vmstat -m 、cat /proc/meminfo |
想看某个具体进程或容器用了多少 Page Cache,也可以进一步用 smem
、pss
、cgroup memory.stat
来分析。