实战

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——但内核需要时会自动让出 cacheavailable 才是真相

常用参数

参数 含义
-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 为准