实战
free -h
# total used free shared buff/cache available
# Mem: 7.7Gi 1.2Gi 5.0Gi 15Mi 1.5Gi 6.2Gi
# Swap: 2.0Gi 0B 2.0Gi
列含义
| 列 | 含义 |
|---|---|
total |
物理内存总量 |
used |
真在用的 |
free |
完全空闲(不含 buff/cache) |
shared |
共享内存 |
buff/cache |
文件缓存 |
available |
真正可给新程序用的(包括会被回收的 cache) |
⚠ 看 available,不是 free
新手常犯错:
Mem: ... used 6G free 500M ... available 5G
↑ ↑
看起来快满了 其实还有 5G 能用
free 列不含 cache——但内核需要时会自动让出 cache。available 才是真相。
常用参数
| 参数 | 含义 |
|---|---|
-h |
人类友好 |
-b/k/m/g |
字节 / KB / MB / GB |
-t |
加 total 行 |
-s N |
每 N 秒刷新 |
-c N |
刷 N 次后退出 |
实战
free -h # 默认
free -m # MB 单位
free -h -s 2 # 每 2 秒刷新
free -h -s 2 -c 5 # 刷 5 次
# 监控内存随时间变化
watch -n 1 free -h
/proc/meminfo(更详细)
cat /proc/meminfo | head
# MemTotal: 8000000 kB
# MemFree: 5000000 kB
# MemAvailable: 6200000 kB
# Buffers: 100000 kB
# Cached: 1500000 kB
# SwapTotal: 2000000 kB
# SwapFree: 2000000 kB
swap 用了说明什么
free -h | grep Swap
# Swap: 2.0Gi 500Mi 1.5Gi
# ↑
# 有就说明物理内存吃过紧
- 偶尔 swap 几十 M:正常
- 持续 swap 几百 M+:内存不够,要加内存或减负载
# 强制清 swap(仅在内存富余时)
sudo swapoff -a && sudo swapon -a
看哪个进程吃内存
ps aux --sort=-%mem | head # top 5
坑
free列接近 0 不要慌——available大就好- 容器里
free显示宿主信息——cgroup 限制看/sys/fs/cgroup/memory/ used包含 buff/cache 算法在不同 kernel 版本略不同——以available为准