free命令结果输出详解

其他相关
JVM调优实战 - deyang - 博客园
命令Linux\MySQL\Java - deyang - 博客园

总结:

total = used(包括 shared) + free + buff/cache
available ≈ free + (部分可回收的 buff/cache)

free命令输出详解

free 命令的输出中,各内存字段之间的关系如下:


1. 内存(Mem)行的字段关系

基本公式

-- 总内存 = 已用内存 + 空闲内存 + 缓冲区/缓存内存
total = used + free + buff/cache

验证数据

total = 62372 MB  
used = 50361 MB  
free = 7866 MB  
buff/cache = 4144 MB  

计算:  
50361 (used) + 7866 (free) + 4144 (buff/cache) = 62372 (total) ✅

2. used 内存包含哪些部分?

used 内存包括:

  • 应用程序使用的内存(如运行中的程序、服务)
  • 内核使用的内存
  • 共享内存(shared)(这部分也在 used 中)

used 不包括 buff/cache,因为缓冲区和缓存是单独列出的。


3. available 内存的计算

available 表示系统估算的可用于新程序的内存,计算方式:

available ≈ free + (部分可回收的 buff/cache)
  • 并不是所有 buff/cache 都能被回收(如正在使用的磁盘缓存、内存映射文件等)。
  • 内核会根据当前内存压力动态计算可回收的部分。

为什么 available 可能比 free 小?

问题:某一次free -m查询发现available比free小是为什么

  • 如果系统认为部分 free 内存需要保留(如内核预留或未来缓存需求),available 可能略低于 free
  • shared 内存(3136 MB)可能被多个进程占用,无法全部计入 available

4. shared 内存的影响
  • shared被多个进程共享的内存(如 tmpfs、共享库等)。
  • 它包含在 used 中,但不直接参与 total = used + free + buff/cache 的计算,因为它是 used 的子集。

5. Swap 行的字段关系
Swap total = Swap used + Swap free
  • 如果你的 Swap 全是 0,说明未启用交换分区(常见于内存充足的服务器或某些云实例)。

总结表

字段 含义 组成关系
total 总物理内存 total = used + free + buff/cache
used 已用内存(不含缓存) 包括应用内存 + shared
free 完全未使用的内存
shared 共享内存(含在 used 中)
buff/cache 缓冲区和缓存内存 可部分回收
available 实际可用内存 ≈ free + 可回收的 buff/cache

关键结论
  1. total = used + free + buff/cache 是核心公式。
  2. availablefree + buff/cache,因为部分缓存可能不可回收。
  3. shared 包含在 used 中,不影响 total 的计算。
  4. 如果 available 远低于 free,可能是由于共享内存或内核预留,部分 free 内存需要保留。
posted @ 2025-06-23 14:10  deyang  阅读(112)  评论(0)    收藏  举报