首页/系统/Linux 运维命令速查/free 内存与 swap 使用
性能与监控48 条

free 内存与 swap 使用

free 一眼看清内存分布:total/used/free/buff-cache/available;判断「内存够不够」要看 available 而不是 free。

Linux 运维命令速查系统更新于 2026-10-13

free 是什么

free 读取 /proc/meminfo,把物理内存与交换空间的使用情况汇总成两行。看懂它需要一个前提:Linux 会把暂时用不到的内存拿去做页缓存与缓冲区,这些内存在应用需要时会被快速回收,所以 free 列小是正常现象,不代表内存紧张。内核为此专门提供 available 列,表示在不触发交换的前提下还能提供给新应用的估算值,判断内存是否充足应看它。

基本信息

适用平台Linux 全发行版与 macOS(procps-ng / BSD free);字段名称与含义略有差异
命令语法free [选项]
常用选项-h 人类可读、-m/-g 指定单位、-w 分开显示 buffers 与 cache、-s 间隔秒数、-c 采样次数、-t 加总计行
数据来源/proc/meminfo 中的 MemTotal、MemFree、MemAvailable、Buffers、Cached、SwapTotal、SwapFree
权限要求无特殊要求

典型使用场景

  • 容量规划:确认机器内存余量与业务增长空间
  • 排查性能下降:判断是否因内存不足导致频繁换页或触发 OOM
  • 验证缓存收益:观察 buff/cache 的增长,理解应用读取为何在二次访问时变快
  • 发布前后对比:记录 available 变化,识别新版本是否显著吃内存
  • 确认 swap 使用:结合换入换出速率判断交换是否真的在拖慢系统
  • 容器与宿主的区分:了解容器内读到的内存口径,避免误判

常用示例

常用示例
free -h
free -m
free -w                  # 分开 buff 与 cache 列
free -h -s 5 -c 3        # 每 5 秒采一次,共 3 次
free -ht                 # 附加总计行
cat /proc/meminfo | head -n 12
vmstat 1 5               # 看 si/so 判断是否在换页
awk '/MemAvailable/{printf "available=%.1f GiB\n", $2/1048576}' /proc/meminfo

字段读法

字段含义判断
total物理内存总量与规格核对,宿主机预留会使其略小于标称值
used已用内存,等于 total 减去 free 与 buff/cache单看它容易高估真实压力
free完全未被使用的内存数值小是常态,缓存占用了闲置内存
buff/cache缓冲区与页缓存,属可回收部分应用需要时会被释放,不是泄漏
available在不触发交换的前提下可提供的估算内存判断内存是否紧张看这一列
Swap used交换分区已使用量结合 si/so 速率看,静态数值参考意义有限
内存紧张的可靠信号不是 free 小,而是这些组合:available 逼近 0、vmstat 里 si/so 持续非零(正在换入换出)、kswapd 占用明显 CPU、日志里出现 OOM killer 击杀记录。只看 free 一列会得出「内存不够」的错误结论。
swap 的使用量本身不是问题,频繁换入换出才是。传统磁盘上换页会带来毫秒级延迟,容易拖垮对延迟敏感的进程;若机器长期大量使用 swap,应先看业务是否存在内存峰值,再考虑扩容或调整 vm.swappiness。
容器内执行 free 通常读到的是宿主机的内存,因为 /proc/meminfo 并不按容器隔离;除非宿主做了 lxcfs 之类的伪装。判断容器自身内存用量应看 cgroup 指标,例如 memory.current、memory.max 与 memory.stat(v2 统一挂载在 /sys/fs/cgroup 下)。
判断是否真的在换页:vmstat 1 输出的 si 与 so 两列是最直接的证据,也可以看 /proc/vmstat 里 pswpin 与 pswpout 的累计值。如果 si 与 so 长期为 0,而 Swap used 不为 0,说明那些页是很久以前换出、之后一直未被访问的,不必紧张。
口径差异要留意:free 的 used 不包含 buff/cache,而部分监控面板或 top 的统计方式会把缓存计入已用,两类数字对不上时先确认统计口径,跨机器比较内存占用应统一使用同一条命令与参数。

易错点

  • 把 buff/cache 当成内存泄漏:缓存高而 available 充足说明系统健康,重启清缓存没有意义还损失缓存收益
  • 只看 free 列判断内存不足,忽略了它是被缓存占用的闲置内存;应以 available 为判断依据
  • 用 swap 使用量判断系统是否吃紧:静态数值说明不了问题,要看换入换出速率与业务延迟表现
  • 在容器内用 free 判断容器内存压力,读到的却是宿主机数字;容器应看 cgroup 的 memory.current 与 memory.max
  • -h 会四舍五入到易读单位,做容量计算与阈值判断时用 -m 或直接读 /proc/meminfo 的 KiB 数值

数据来源与参考

  • man 1 free(procps-ng)
  • man 5 proc(/proc/meminfo)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌