在 Linux 的 top 或 free 命令中,buff/cache 是 buffer(缓冲区) 和 cache(缓存区) 的合称,二者都是内核用于提升系统 I/O 性能的内存区域,具体区别和作用如下:
1. 核心概念
| 类型 | 中文名称 | 作用对象 | 核心作用 |
|---|---|---|---|
| Buffer | 缓冲区 | 块设备(硬盘、SSD 等) | 临时存储要写入磁盘的数据,减少磁盘碎片化写入,提升写入效率 |
| Cache | 缓存区 | 文件系统、数据 | 临时存储从磁盘读取的数据,下次访问时直接从内存读取,避免重复磁盘 I/O |
2. 关键特点
-
buff/cache 属于「可回收内存」
当系统空闲时,内核会主动利用空闲物理内存作为 buff/cache;当应用程序需要更多内存时,内核会自动释放 buff/cache 分配给应用,不会导致内存不足。 -
查看 buff/cache 具体数值
用free -h命令可以更清晰地看到细分数据:free -h # 输出示例 total used free shared buff/cache available Mem: 3.5Gi 342Mi 3.2Gi 0.0Ki 0.0Ki 3.2Gi Swap: 0B 0B 0B-
buff/cache:缓冲区+缓存区的总占用内存 -
available:真正可用的内存(free + 可回收的 buff/cache)
-
3. 与 top 命令的关联
你之前提供的 top 截图中没有显示 buff/cache,原因是:
- 默认
top界面的内存统计只展示 total/used/free,不显示 buff/cache 细分。 - 按
top运行时的m键 切换内存显示模式,或直接用free -h查看更完整的内存分布。
4. 手动释放 buff/cache(可选)
一般无需手动释放,内核会自动管理。若需测试或临时释放,可执行:
# 释放 pagecache(缓存区)
echo 1 > /proc/sys/vm/drop_caches
# 释放 dentries 和 inodes(文件元数据缓存)
echo 2 > /proc/sys/vm/drop_caches
# 释放所有 buff/cache
echo 3 > /proc/sys/vm/drop_caches
注意:需要 root 权限,且仅临时生效,系统后续会重新分配 buff/cache。
要不要我帮你整理 free 命令的参数详解和内存状态解读技巧?