应直接关注available列,它比free列更准确反映真实可用内存,因available已估算可回收的buffer/cache等部分,而free仅统计完全未分配的内存。

直接看 available 列,它比 free 列更反映真实可用内存——Linux 内存管理会把未用的 buffer/cache 动态回收,available 已估算这部分可释放量。
怎么看懂 free 输出里的 Mem 行和 -/+ buffers/cache 行
默认执行 free 会显示两行关键内存统计:
-
Mem行中used包含了正在被内核缓存(buffers和cached)占用的部分,不能直接理解为“被进程吃掉”的内存 - 下面那行
-/+ buffers/cache的used才是进程实际占用的物理内存(即Mem.used - buffers - cached),free则是加上可回收缓存后的估算空闲量 - 现代内核(3.14+)已用
available替代该行逻辑,它综合考虑 page cache 可回收性、slab 内存、low watermark 等,比旧式计算更准
为什么加 -h 但 still 看不懂 available 和 free 差那么多
这是常见误解点:free 列只算完全没分配的页帧,而 available 是内核估算“此刻能立刻拿给新进程用”的总量,包含:
- 未使用的页(
free) - 部分可快速回收的 page cache(比如文件缓存,无 dirty 数据)
- 部分 slab 中可收缩的对象(如 dentry、inode 缓存)
所以 available ≥ free 是正常现象;若 available 接近 0,才真正意味着内存紧张——哪怕 free 还有几百 MB。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
如何用 free 定位真实内存压力来源
free 自身不显示进程级数据,但它能帮你判断是否需要进一步排查:
- 如果
available持续低于总内存的 10%,且swap.used> 0 → 确实缺内存,需查进程 - 运行
ps aux --sort=-%mem | head -n 11查内存占比最高的进程 - 注意
rss(常驻内存)比vsz(虚拟内存)更能反映实际物理占用 - 若
buff/cache占比极高(比如 >70%),但available充足,通常无需干预——Linux 正在用空闲内存加速 I/O
free -t 和 free -o 的实际影响
-t 只是加一行 Total 汇总,对诊断无实质帮助;-o 会隐藏 buffers 和 cached 两列,反而让 available 失去上下文支撑——现代系统强烈不建议用 -o。
真正有用的组合是 free -h -s 2(每 2 秒刷新)配合观察 available 趋势,再切到 top 按 Shift+M 看实时进程排序。记住:数值本身不重要,波动节奏和 swap 是否被触碰,才是内存是否告急的关键信号。










