Linux 怎么查看内存占用?free/top/ps 与 buffer/cache 一次讲清
答案:系统整体用 free -h,盯 available 而不是 free;进程维度用 top(按 M 排序)或 ps aux --sort=-%mem | head。used 高、free 低大多是被页缓存占用,能自动回收,不等于内存不足。
一、free -h:先看懂四列
free -h
# total used free shared buff/cache available
# Mem: 7.6Gi 3.1Gi 1.2Gi 0.1Gi 3.3Gi 4.2Gi
# Swap: 2.0Gi 0.1Gi 1.9Gi| 列 | 含义 | 怎么看 |
|---|---|---|
total | 物理内存总量 | — |
used | 已用(total - free - cache 可回收部分) | 高不代表紧张 |
free | 完全空闲 | 不要只看它 |
buff/cache | 块缓冲 + 页缓存 | 需要时可回收,用于加速磁盘 |
available | 应用实际还能拿到的内存 | 判断容量的关键列 |
最常见的误报:登录一看
free只剩几百 MB 就以为内存要爆。Linux 的设计是"空闲内存就是浪费的内存",内核会主动拿它做 page cache;这部分在应用申请内存时由内核快速回收。容量看available,它已经把可回收的 cache 估算进去了。
二、找占内存最多的进程
top # 进入后按 M,按 %MEM 降序;q 退出
htop # 更直观,F6 选 PERCENT_MEM 排序
ps aux --sort=-%mem | head -n 11 # 脚本里最常用
ps -eo pid,comm,rss --sort=-rss | head # RSS 以 KB 计,看绝对值
%MEM是占总物理内存比例,RSS列是实际驻留物理内存(KB)。注意 RSS 会把共享库在每个进程里都算一遍,所以把所有进程 RSS 加起来会超过物理内存,这是正常的重复计数。
三、RSS / PSS / VIRT:别被虚拟内存吓到
| 指标 | 含义 | 会不会"虚高" |
|---|---|---|
VIRT(虚拟内存) | 进程映射的全部虚拟地址空间 | 会,预留未用的也算,几个 G 很常见 |
RSS | 实际驻留物理内存 | 含共享库,多进程重复计 |
PSS | 共享内存按进程数均摊后的占用 | 最接近"真实分摊",需用 smem/proc 细算 |
判断一个进程到底吃多少内存看 RSS/
%MEM,不要看 VIRT——JVM、数据库预留的虚拟地址空间可以远大于物理占用。
四、什么情况才算真的内存不足
free -h # available 持续很低(如 < 总量 10%)
vmstat 1 # si/so 两列持续非 0 = 在频繁换入换出 swap
dmesg -T | grep -i 'killed process' # 出现 oom-killer 杀进程记录
journalctl -k | grep -i oom真正的危险信号是组合拳:
available长期很低 且 swap 的si/so持续增长(抖动)且 内核日志有 OOM 记录(被杀进程退出码常为 137)。只占 cache、available 充裕、无换页,就是健康状态。被 OOM 杀掉的完整排查见 OOM 怎么排查,free 命令本身的逐列详解在此。
FAQ
Q: Linux 查看内存占用用什么命令? A: free -h 看整体(重点 available),top/htop 按内存排序看进程,ps aux --sort=-%mem | head 脚本化取占用最高者。
Q: free 和 available 的区别? A: free 是完全空闲;available 是应用实际还能申请到的量,包含可快速回收的 buffer/cache。判断够不够看 available。
Q: used 很高但机器不卡,正常吗? A: 正常。空闲内存被用作页缓存加速 IO,需要时自动回收。看 available 和是否换页/OOM,而非 free 那一列。
Q: RSS、PSS、VIRT? A: VIRT 是虚拟地址空间(常虚高),RSS 是实际驻留物理内存(共享库重复计),PSS 把共享内存按比例分摊、最接近真实。
Q: 怎么确认真的内存不足? A: available 持续很低、vmstat 的 si/so 持续非 0、dmesg/journalctl 有 oom-killer 记录,三者结合判断。
一句话总结:看内存用 free -h 盯 available,找进程用 top(M 排序)/ps --sort=-%mem;free 少、buff/cache 大是 Linux 主动缓存、可回收,不是内存紧张;真不足要看 available 低 + swap 抖动 + OOM 日志三者叠加。