Linux free 命令下 free 和 available 区别

转自:linux free 命令下 free/available 区别_linux free available-CSDN 博客

例子

[root@xxxxxxx ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:            15G        9.3G        167M        1.9M        6.0G        5.9G
Swap:            0B          0B          0B

第一列

  • Mem:内存的使用信息
  • Swap:交换空间的使用信息

第一行

  • total:系统总的可用物理内存大小
  • used:已被使用的物理内存大小
  • free:还有多少物理内存可用
  • shared:被共享使用的物理内存大小
  • buff/cache:被 buffer 和 cache 使用的物理内存大小
  • available:还可以被应用程序使用的物理内存大小

free 与 available 的区别

  • free:真正尚未被使用的物理内存数量。
  • available:应用程序认为可用的内存数量,available ≈ free + buffer + cache(只是大概的计算方法)。

Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据。对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。

buff 和 cache 的区别

以下内容来自 buffer 和 cache 怎么让你们解释的那么难理解?

buffer(缓冲):主要用于写操作,数据先写入 buffer,等到合适时机再统一写入磁盘,提高写入效率。

cache(缓存):主要用于读操作,数据从磁盘读取后会被缓存到 cache,下次读取相同数据时可以直接从 cache 获取,提高读取效率。

形象例子

假设有两个设备 A(1000M/s)和 B(500M/s),A 和 B 之间通过 ab 区域进行数据交互:

  • A 从 B 取数据:ab 会缓存一份数据,下次 A 或其他设备再取时可以直接从 ab 获取,提高效率,这就是 cache。
  • A 给 B 发送数据:A 先把数据交给 ab,ab 再慢慢传给 B,A 可以立刻去做别的事,这就是 buffer。
buffer 和 cache 示意图

计算机领域的实际应用

在磁盘 IO 读写时,CPU、内存、磁盘之间的数据流动也采用了类似的模型:

  • page cache:文件系统层级的缓存,从磁盘读取的内容会存储到这里。比如用 grep、find 查找文件时,第一次慢,再次就很快。
  • buffer cache:磁盘等块设备的缓冲,内存的这一部分数据最终要写入磁盘。数据不是即时写入,而是系统空闲或 buffer 达到一定大小时统一写入。
page cache 和 buffer cache 示意图

注意事项

  • 位于 buffer 的数据不是即时写入磁盘,断电会丢失数据。建议正常关机或多执行几次 sync 命令,确保数据安全。
  • 对于不关心文件更新的场景,可以不清 cache;如果需要同步,必须清理 cache。
posted @ 2025-07-09 21:32  Higurashi-kagome  阅读(369)  评论(0)    收藏  举报