free 显示内存快用满了?理解 available、cache 与回收

服务器运行一段时间后,free 显示剩余内存很少,很多人会担心马上崩溃。Ubuntu 24.04 的 Linux 内核会把部分内存用于文件缓存,提高后续访问效率。判断容量是否紧张,应结合可回收空间、进程需求和业务表现,不能只盯着一个“空闲”数字。

先看工具版本与单位

在服务器执行:

free --version
free -h
free -w -m

-h 便于快速阅读,-w 把 buffers 与 cache 分列,-m 使用对应的二进制单位。不同工具版本可能调整列的计算方式,网上旧截图里的 used 公式不一定适用于当前版本。

Ubuntu 24.04 所提供的 free 手册把 used 解释为 total 减 available。要用本机版本及手册核对,不把其他系统监控面板的“已用”直接当成同一口径。free 手册列出了各字段定义与单位选项。

available 比单看 free 更接近容量问题

free 表示当前没有使用的空间,available 则估计在不交换的前提下还能为新应用提供多少内存。这个估算会考虑部分缓存和可回收内核对象,因此它可能明显大于 free。

available 也不是一个绝对可分配保证。实际分配还受控制组上限、内存碎片、特定类型内存和并发需求影响。某个容器可能先达到自身限制,而宿主机的 available 看起来仍然充裕。看全机总量时,应同时确认服务自己的资源范围。

可以把它理解为更有用的余量观察值,但不能从某个瞬间的数字推导出“再开多少个进程一定安全”。

缓存、共享内存和进程占用有重叠

buff/cache 包含文件缓存和部分可回收内核缓存,并不表示这些内容可以随时全部无代价地释放。正在使用或需要写回的页面,回收条件和成本都不同。shared 常与 tmpfs 等共享内存有关,也不能简单加到其他列上计算总占用。

类似地,把所有进程 RSS 直接相加,可能重复统计共享页面;虚拟地址空间大小也不是实际物理内存用量。内核 /proc 文档解释了 meminfo 及进程内存统计的来源和口径。

因此,先决定要回答的是“整机还有多少余量”“哪类内存在增长”还是“哪个进程负责”,再选择合适指标。不要把不同口径的数字强行拼成一张必须相等的账单。

连续观察才能发现真实压力

free -m -s 2 -c 10 观察一段时间,再对照请求延迟、换入换出、进程增长和内存终止记录。备份结束后缓存较大,业务仍正常且余量足够,通常与持续泄漏造成的可用内存下降不同。

如果 available 持续减少,应检查应用并发、缓存上限、长时间运行任务和共享内存文件。记录峰值出现在哪个动作之后,而不只是汇报“内存用了很多”。容器环境还要对照容器指标与宿主机指标,避免因为看的是不同范围而误判。

交换空间已用也需要结合活动程度看待。曾经换出的冷页面可能暂时留在 swap 中,不能只凭非零用量认定服务器此刻一直在抖动换页。

不用定期清缓存替代容量治理

把定期清空内核缓存当成日常优化,可能让后续请求重新读盘,反而造成更多延迟。清缓存更适合有明确目的的测试场景,不应为了让监控图下降而在生产服务器反复执行。本文不提供这样的自动清理任务。

真正需要调整时,应给应用设置合理的缓存和并发,错开内存峰值任务,或在负载验证后扩容。保留原值,改动后检查业务耗时与内存趋势,而不是仅确认 used 变小。

如果已经发生 OOM,恢复后再看 free 往往会发现余量增加,因为被终止的进程释放了内存。那是故障的后果,不能据此否定当时的压力;应结合事件时段日志完成分析。

参考资料

继续阅读

返回天理云文章中心

分享到:
上一篇
Linux 负载高但 CPU 不高?load average 与 iowait 排查
下一篇
新增磁盘后先看什么:用 lsblk 确认设备、分区与文件系统
服务中心
企微客服
企微客服
给您高效服务
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意