free 命令是 Linux 上最直接的查看内存使用情况的工具。它从 /proc/meminfo 文件中读取数据,并以简洁的格式展示物理内存、交换空间的总量、已用量、空闲量等信息。在日常运维、性能诊断和容量规划中,free 往往是第一个被执行的命令。
常用选项
free:不带任何选项会以千字节(KB)为单位显示,默认可能显示较长的数字。free -h:--human,以人类可读的格式显示(自动调整为 KB、MB、GB),最常使用。free -s 5:--seconds,每 5 秒刷新一次,适合持续观察内存变化趋势。free -t:--total,在最后多显示一行“总物理内存+交换空间”的合计。
输出字段详解
执行 free -h 后,通常会看到类似以下的输出:
total used free shared buff/cache available
Mem: 7.6G 2.1G 3.2G 123M 2.3G 5.1G
Swap: 2.0G 0.0B 2.0G
- total:物理内存总量。
- used:已被程序直接占用的内存量(不含 buffer/cache)。
- free:完全未被使用的内存(在较新版本中,这个值通常很小并不意味着内存不够)。
- shared:被多个进程共享的内存(通常是 tmpfs 共享内存,
/dev/shm等)。 - buff/cache:被内核用于文件系统缓存和缓冲区的内存。这部分可以随时被回收给应用程序使用,所以它不能算作“已用”。
- available:这是最关键的字段!它估算出在不触发交换空间的情况下,可以直接分配给新启动的进程的内存大小。它考虑了可以回收的缓存和一部分共享内存,因此
available比简单的free + buff/cache更精确。如果这个值很小,说明系统确实内存紧张。 - Swap 行:展示交换空间(通常为磁盘上的交换分区或交换文件)的总量、已用量和空闲量。如果
swap used持续增长,往往意味着物理内存已经捉襟见肘,系统在频繁地把不活跃的数据换出到磁盘,导致整体性能下降。
实用场景与解读要点
- 快速判断内存是否充足:不要只盯着
free列。一个运行正常的 Linux 系统,free往往会很小,因为内核会积极利用剩余内存来缓存文件系统数据(buff/cache)。真正要关注的是available是否远大于零。例如上面示例中available为 5.1G,物理内存总量 7.6G,系统非常健康。 - 检查是否有内存泄漏:通过
free -s 2持续观察used列(或用available的递减)来判断是否有进程在持续吞食内存。同时结合top或ps命令按内存排序,定位嫌疑进程。 - 判断是否需要加内存:如果
available长期低于物理内存的 10%~15%,且交换空间使用量持续增加,应用程序响应变慢,就说明内存已经成为瓶颈,应考虑扩容或优化程序内存占用。 - 与
/proc/meminfo的关系:free的数据取自内核伪文件系统。如果你需要更精细的数据(如脏页大小、Slab 内存、页表大小等),可以直接查看/proc/meminfo。但对日常巡检和告警脚本来说,free -h已经足够。
一行常用命令组合
# 持续监控内存并高亮变化
watch -n 1 free -h
或者使用更现代化的替代工具,如 htop(图形界面)或 vmstat(综合统计),但 free 始终是脚本输出和远程维护时最直观可靠的选择。它不依赖图形终端,在任何 SSH 环境下都能立即给出内存健康状况的快照。