很多同学看到 free 命令输出中“已用内存”很高就感到恐慌,但真相可能完全相反。本文将彻底解析 free 命令,让你真正理解Linux内存管理机制。
一、一个常见的误解场景
当你运行 free -h 命令,看到这样的输出:
$ free -h
总计 已用 空闲 共享 缓冲/缓存 可用
内存: 15Gi 12Gi 500Mi 300Mi 2.2Gi 1.8Gi新手的第一反应往往是:"天啊!我的15GB内存已经用了12GB,只剩下500MB空闲,系统要卡死了!" 但这是完全错误的解读! 让我们揭开真相。
二、free命令输出详解
标准输出格式解析
$ free
total used free shared buff/cache available
Mem: 16244396 4442564 1147224 461524 10654608 10209888
Swap: 2097148 0 2097148total:总物理内存 系统安装的所有RAM大小
used:已使用内存 = total - free - buff/cache;它包含了应用程序使用的内存和一部分buff/cache内存。
free:完全空闲内存 未被任何程序使用的"裸"内存;这个值通常很小,因为在Linux中,空闲内存会被用来做缓存以提高性能,所以“空闲少”不一定是坏事。
shared:主要是
tmpfs(临时文件系统,如/dev/shm)和共享内存(SHM)占用的内存。多个进程可以共享的内存部分。buff/cache:缓冲区/页缓存 Linux性能优化的核心!可被快速回收
buffers: 内核缓冲区(Buffer)大小,主要用于存放磁盘块的元数据(如文件系统属性、权限等)和原始磁盘块的临时存储。对块设备(如磁盘)的读写操作会用到。
cache: 页缓存(Page Cache)大小,用于缓存从磁盘读取的文件和数据。当再次访问这些文件时,可以直接从内存读取,极大加速I/O。
这部分内存在应用程序需要时可以被快速回收使用,所以它算作“可用”资源。
available:估算的、可供应用程序使用的内存量。这是判断内存是否充足的最重要指标!
它是
free + buff/cache中可以被回收的部分的一个估算值。即使
free很小,只要available很大,就说明系统有充足的内存资源供新程序使用。
Swap:交换分区 硬盘模拟的内存,使用过多会严重影响性能
三、Linux内存管理哲学
为什么free内存那么少?
Linux内核有一个基本原则:闲置的内存是浪费的内存。
页缓存(Page Cache):当你读取文件时,Linux会将文件内容缓存在内存中
缓冲区(Buffers):存储文件系统元数据和磁盘块信息
这些缓存可以随时被回收,当应用程序需要更多内存时,内核会立即释放它们
四、如何正确判断内存状态?
核心观念:Linux 会充分利用内存进行缓存,以提升系统性能。未被程序使用的内存会被自动用作磁盘缓存。因此,不要单纯看 used 和 free 来判断内存是否紧张。
黄金法则:看 available,不要看 free!
1. 看内存是否充足,主要看 available 列:
available的值很大(例如,占总内存的 20-30% 以上):内存充足。available的值很小或接近于 0:内存可能不足,系统可能会开始使用交换分区(Swap),导致性能下降。
2. 看交换分区(Swap)的使用情况:
Swap used持续大于 0,且available很小:说明物理内存已经不够,系统正在频繁使用硬盘来模拟内存,性能会受严重影响。Swap used为 0 或很小:正常状态。
五、常用选项
free -h:以人类易读的单位(B, K, M, G)显示。最常用。free -m:以 MB 为单位显示。free -g:以 GB 为单位显示(会取整)。free -s 5:每 5 秒自动刷新一次显示(按Ctrl+C停止)。free -t:在输出末尾显示一行 总计(物理内存+Swap 的总和)。free -h -s 3:# 每3秒刷新一次watch -n 3 free -h:# 结合watch命令