free -h 里的 total 是物理内存总量,used 是传统计算出的已用内存,free 是彻底没被碰过的内存,shared 是共享内存,buff/cache 是内核拿来当磁盘缓存的“可让位”空间,available 才是真正还能分配给新进程的内存,一句话:服务器内存够不够,先看 available,别只盯着 free。
在实际运维里,很多误判都来自把 free 当成唯一可用内存,free -h 一旦显示 free 只剩几百 MB,就以为机器要挂了,Linux 的内存调度思路和 Windows 不太一样,它会把空闲内存尽量拿去做缓存,下面把每一列拆开讲清楚。
服务器free -h各列含义:把内存当成一套合租房
先看一条常见的 free -h 输出:
total used free shared buff/cache available
Mem: 7.6Gi 2.1Gi 1.2Gi 125Mi 4.3Gi 5.1Gi
Swap: 2.0Gi 0B 2.0Gi
这张表可以理解成一套合租房,total 是整套房面积,used 是已经住人的面积,free 是完全空置的房间,shared 是公共区域,buff/cache 是堆在房间里但随时能腾出来的书和箱子,available 则是把书和箱子整理后真正能住人的面积。
| 列名 | 含义 | 合租类比 |
|---|---|---|
| total | 物理内存总大小 | 整套房总面积 |
| used | 传统口径已用,total 减去 free 再减去 buff/cache | 已经住人的面积 |
| free | 完全未被使用的内存 | 完全空置的房间 |
| shared | 多个进程共享的内存,常见于 tmpfs 和共享内存段 | 公共区域 |
| buff/cache | 内核用于磁盘缓存的内存,可回收 | 堆在房间里的书和箱子 |
| available | 估算可供新进程使用的内存,包含可回收缓存 | 收拾一下能住人的面积 |
这里的 used 并不是所有物理内存占用,很多监控工具早期只读 used 这一列,容易产生误报,free -h 的 used 计算逻辑是 total – free – buff/cache,换句话说,buff/cache 没有被算进 used,但它确实被内核临时占用了,因此光看 used 和 free,都不足以判断剩余可用内存。
Swap 行也需要单独理解,Swap 是交换分区,用磁盘空间模拟内存,当物理内存紧张时,内核会把一部分不常用的内存页换出到 Swap,Swap 的 used 为 0B 时说明系统没有发生换页,或者还没有到使用交换分区的地步。

free -h available和free的区别:空着和能住进去是两回事
很多人第一次看到 7.6Gi 总内存里 free 只有 1.2Gi,会立刻紧张,但同一行 available 显示 5.1Gi,为什么差这么多?
因为 free 只代表完全没有被使用的内存,available 则会加上 buff/cache 中可以安全回收的部分,buff/cache 里的多数缓存页是干净的,内核可以随时把它们释放给新进程使用,free 是“空着”,available 是“算上能马上回收的缓存,到底还能匀出多少”,两者完全是两个概念。
available 也并不是 free 加 buff/cache 的总和,buff/cache 里可能包含脏页,也就是数据还没写回磁盘的缓存页,这部分不能立刻回收,必须先写回磁盘,内核在估算 available 时,会剔除不能在短时间内安全回收的内存,available 通常小于 free + buff/cache,但远大于 free。
日常判断内存是否充足,直接看 available 更符合实际,比如跑 Java 应用时 free 可能长期只剩 800M,但 available 还有 4G 以上,这种情况多数不需要加内存,反过来,available 已经掉到几十 MB,即使 free 看起来还有一点,系统也可能马上触发内存回收和 Swap 换页。
linux free -h命令详解:buff/cache不是内存小偷,是图书管理员
Linux 有一个很明显的特征:内存越用越“满”,刚开机时 free 很大,运行一段时间后 buff/cache 涨得很快,free 下降,这不是内存泄漏,而是内核在主动利用空闲内存。
buff/cache 主要包含两部分:
- buffers:用于块设备元数据缓存
- cache:用于文件内容页缓存
可以把它理解成图书管理员,你把常用的书从书库搬到桌面,虽然桌面堆满了,但下次找书速度极快,Linux 会把读过的文件内容放进内存,下次读取直接命中缓存,不用再碰磁盘,对于磁盘性能较弱的服务器,这种缓存对 IO 提升非常明显。
当新进程需要内存而 free 不够时,内核会先回收干净的缓存页,这个过程对缓存内容没有伤害,因为数据本来就在磁盘上,如果还不够,内核才会把脏页写回磁盘,然后回收,只有在缓存回收后仍然无法满足请求时,系统才会动用 Swap,buff/cache 不是内存小偷,它更像一个会自动腾地方的图书管理员。

CentOS free -h buff/cache是什么意思:缓存什么时候会还回来
CentOS 7、8、9 以及 Rocky Linux、AlmaLinux 上,free -h 的输出含义完全一致,因为这些系统都使用 procps-ng 提供的 free 命令,CentOS 用户装完系统后常常发现 buff/cache 越跑越高,这属于正常现象。
缓存会在以下几种情况下还回来:
- 新进程申请内存,free 不足时,内核自动回收干净缓存页
- 脏页写回磁盘后被回收
- 内存压力升高,系统触发内存回收机制
- 手动执行释放缓存命令
手动释放 buff/cache 的操作路径如下:
sync
echo 3 > /proc/sys/vm/drop_caches
drop_caches 后面的数字有不同含义:
- 1:释放 page cache
- 2:释放 dentries 和 inodes
- 3:释放 page cache、dentries 和 inodes
这个命令通常用于测试环境或需要临时释放大量缓存做基准测试的场景,生产环境不建议频繁执行,一旦缓存被清空,后续所有磁盘读取都要重新落到物理盘上,IO 压力会明显上升,系统变慢的可能性反而更大,缓存自己会在合适的时候还回来,一般不需要人为干预。
怎么分析free -h结果判断内存够不够:盯住available和swap的脸色
运维人员最常问的问题就是:这台服务器内存到底够不够?判断方法并不复杂,关键是不要只看 free。
- 先看 Mem 行的 available,如果长期只剩几十 MB 到一两百 MB,并且还在继续下降,说明物理内存已经吃紧。
- 再看 Swap 的 used,Swap 开始被使用并不一定是坏事,但 Swap used 持续增长,si/so 频繁出现,就是典型的物理内存不够信号。
- 用
vmstat 1 5观察 si 和 so 两列,si 是换入,so 是换出,长期非零且数值较大,说明系统在频繁换页。 - 用
top或htop查看进程内存占用,找到异常增长或泄漏的进程。
| 判断维度 | 健康状态 | 紧张状态 |
|---|---|---|
| available | 明显高于日常告警阈值 | 长期只剩几十 MB 到一两百 MB |
| Swap used | 基本为 0 或很少 | 持续增长,且 si/so 频繁 |
| buff/cache | 高但稳定 | 缓存已被压缩,仍频繁换页 |
| free | 低但 available 高 | free 和 available 都低 |
行业共识认为,判断物理内存压力不能只看 free,把 available 和 Swap 吞吐结合起来才更接近真实,很多服务器在正常运行时 free 都会很低,但只要 available 充足,系统就不会因为内存问题卡顿。
实操命令扩展:把free -h放进日常巡检
除了 free -h,还有几个常用命令可以组合使用:
free -h:快速查看内存总览free -m:以 MB 固定单位显示,适合脚本取数free -g:以 GB 固定单位显示free -s 3:每 3 秒刷新一次,适合观察变化watch -n 1 free -h:实时监控内存变化cat /proc/meminfo:查看更详细的内存字段,包括 MemAvailable、Dirty、SwapCached 等vmstat 1 5:观察 Swap 换入换出情况
free 命令的数据来源是 /proc/meminfo,available 对应 MemAvailable,buff/cache 对应 Buffers、Cached 和 SReclaimable 的合计,看原始文件能获得比 free -h 更细的信息,比如脏页数量、活跃缓存和非活跃缓存等。
再看服务器 free -h,先看 available,再看 Swap 和 si/so,free 低不是问题,available 低才是。
free -h常见问题:服务器free -h里shared和buff/cache代表什么?
free -h里available为什么比free大很多?
available 比 free 大很多,是因为 available 会把 buff/cache 中可安全回收的缓存页算进去,free 只是完全未使用的内存,而 buff/cache 中的干净缓存可以随时释放给新进程使用,available 通常比 free 大,尤其是磁盘读写频繁的服务器上差距更明显。
free -h结果swap used不为0是不是内存不够?
Swap used 不为 0 不等于内存不够,Linux 内核会根据 vm.swappiness 参数决定是否把不活跃的内存页换到 Swap,有时候即使物理内存还有剩余,内核也会提前换出一些长期不用的页面,真正需要警惕的是 Swap used 持续增长,vmstat 中 si/so 长期频繁非零,那才说明物理内存已经不能稳定满足工作负载,系统在频繁换页,性能会明显下降。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/820266.html


评论列表(2条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于先看的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于先看的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!