温馨提示×

linux缓存是什么

小樊
33
2026-09-15 17:50:27
栏目: 智能运维

在 Linux 系统中,“缓存(Cache)”通常指的是用来加速数据访问、减少磁盘 I/O 的内存区域。它是 Linux 内存管理的重要组成部分,也是很多人看 freetop 命令时容易混淆的地方。

下面从几个层面给你讲清楚。


一、Linux 中常见的“缓存”指什么?

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

  • Linux 会把文件内容读入内存中缓存起来
  • 包括:
    • 普通文件(文本、二进制)
    • 目录项
    • 部分块设备
  • 目的:下次读文件更快,不用再读磁盘

示例:

cat bigfile.txt

第一次慢,第二次快 → 因为已经在 Page Cache 中

查看方式:

free -h
              total        used        free      shared  buff/cache   available
Mem:           7.7G        2.1G        3.2G        120M        2.4G        5.0G
  • buff/cache 主要就是 Page Cache + Buffer

2. Buffer(缓冲区)

  • 主要用于:
    • 块设备(如硬盘)的元数据
    • 文件系统的 inode、目录结构
  • 现在 Buffer 和 Cache 在 Linux 中经常合并统计

简单区别(旧说法):

  • Cache:文件内容
  • Buffer:文件系统的“管理信息”

3. dentry cache / inode cache

  • dentry:目录项缓存(路径 → inode)
  • inode:文件元信息缓存
  • 属于内核缓存的一部分

二、Linux 缓存的特点(很重要)

✅ 缓存是“可回收内存”

  • 缓存不算真正被占用的内存
  • 当程序需要内存时,Linux 会自动回收缓存

所以:

used 内存高 ≠ 内存不够

available 才是你能用的真实内存


三、缓存有什么好处?

  • 提升文件读写速度
  • 减少磁盘磨损
  • 提高系统整体性能

四、常见问题

1. 缓存会不会拖慢系统?

不会。
Linux 设计上:

  • 缓存优先用空闲内存
  • 程序需要时立即释放

2. 能不能手动清缓存?(一般不建议)

# 清理 pagecache
echo 1 > /proc/sys/vm/drop_caches

# 清理 dentries + inodes
echo 2 > /proc/sys/vm/drop_caches

# 全部清理
echo 3 > /proc/sys/vm/drop_caches

⚠️ 仅用于测试或排错


3. swap 和 cache 一样吗?

不一样:

  • cache:内存 ↔ 磁盘文件
  • swap:内存 ↔ 磁盘交换区(给进程用)

五、一句话总结

Linux 缓存是利用空闲内存缓存磁盘数据,用来加速系统,不是“浪费内存”,而是“聪明地使用内存”。

如果你愿意,我也可以结合 freetopvmstat 或你遇到的具体场景(比如服务器内存报警)来详细讲。

0