关键看 available 值而非 used:available ≈ free + 可回收 buff/cache,低于总内存10%或 MemTotal + SwapTotal 有风险;用 ps aux --sort -rss 或 smem -s rss -r 查真实进程内存占用;需结合 available、Swap used、vmstat 的 si/so 综合判断内存压力。

free -h 看整体内存分布,但别只盯 used 字段
很多人一上来就 free -h,扫一眼 used 值接近 total 就喊“内存快爆了”,其实错得离谱。Linux 的 used 包含了内核缓存(buffers/cache),这部分随时可回收,不算真正被进程占死的内存。
关键看三行:
-
Mem行的available:这才是新进程能立刻拿到的物理内存,它 ≈free+ 可快速回收的buff/cache;低于总内存 10% 或绝对值 -
Swap行的used:只要大于 0,说明物理内存已不够用,内核开始把冷页换出到磁盘——这是真实瓶颈的硬信号 - 第二行和第三行(
-/+ buffers/cache)的used:这一行的used才更贴近用户态进程实际占用的物理内存(RSS 总和),但仍是近似值
top 或 htop 按 RSS 排序,揪出真·吃内存的进程
top 默认按 CPU 排,得手动切到内存视角;htop 更直观,但两者都依赖 RSS(Resident Set Size)字段——它代表进程当前实际驻留在物理内存中的字节数,不含 swap、不计共享库重复部分,是判断“谁在占 RAM”的最可靠指标。
操作要点:
-
top启动后按Shift+M,列头出现%MEM和RSS,后者单位是 KB,数值越大越占物理内存 -
htop启动后按F6→ 选RSS→Enter,顶部会显示各进程 RSS 占比条形图 - 注意区分
VIRT(虚拟地址空间大小)和RSS:一个进程VIRT几 GB 很常见,但RSS只有 50MB,说明它没真用那么多物理内存
/proc/meminfo 提供底层字段,用于交叉验证
free 和 top 都是从 /proc/meminfo 读数据再加工的,直接看原始字段能避开工具封装带来的歧义。比如 MemAvailable 是内核计算出的真正可用量,比 free 命令输出的 available 更权威;而 SwapCached 高企说明刚换入的页面又被缓存,可能暗示 swap 频繁抖动。
常用字段含义:
-
MemTotal:物理内存总量(不可变) -
MemFree:完全未使用的内存页,通常极小,不能代表可用性 -
MemAvailable:内核估算的、可立即分配给新进程的内存(含可回收 cache),这个值最值得监控 -
SwapTotal/SwapFree:交换分区总/剩余容量,与free输出一致 -
Committed_AS:内核承诺给所有进程的内存总和(含未来可能分配的),若持续 >MemTotal+SwapTotal,说明过量分配风险已存在
ps aux --sort -rss 或 smem 查单进程 RSS 总和
当 top 显示某几个进程 RSS 加起来远小于 free 的 used 值,说明有大量小进程或内核模块在吃内存,靠肉眼翻页难定位。这时候需要聚合统计。
两种实操方式:
-
ps aux --sort -rss | head -n 11:列出 RSS 最大的前 10 个进程,--sort -rss是关键,负号表示降序 -
smem -s rss -r:比ps更准,它能扣除共享内存重复计算(比如多个 Chrome 标签共用的 V8 引擎库),-s rss -r按 RSS 逆序排 - 注意:
ps的RSS单位是 KB,smem默认是 KB,但加-k可强制 KB、-m强制 MB,避免单位混淆
真实内存压力从来不是单个数字能概括的——available 低、Swap used 持续增长、si/so 在 vmstat 1 里频繁非零,这三者同时发生,才是物理内存确实不够的铁证。盯着一个命令、一个字段就下结论,最容易误判。


















