free 是 Linux 系统中用于查看内存(物理内存、交换内存)使用情况的核心命令,能实时展示系统内存的总容量、已用、空闲、缓存、缓冲区等关键指标,是运维和开发人员排查内存瓶颈的常用工具。以下是其详细用法、参数、输出解析及实用技巧:
一、核心功能与语法
1. 基本功能
读取 /proc/meminfo 文件(系统内存的实时状态数据),并以人性化的格式展示物理内存(RAM) 和交换内存(Swap) 的使用情况,支持不同单位(KB、MB、GB 等)显示。
2. 完整语法
bash
运行
free [选项]- 无选项时,默认以 KB 为单位显示内存信息;
- 支持多个选项组合(如
-h -s 2,人性化格式 + 每秒刷新)。
二、常用选项(Options)
选项 | 功能说明 | 示例 |
| 以字节(Bytes) 为单位显示 |
|
| 以千字节(KB) 为单位显示(默认) |
|
| 以兆字节(MB) 为单位显示 |
|
| 以吉字节(GB) 为单位显示 |
|
| 显示内存 + 交换分区的总计行(Total) |
|
| 人性化格式(自动选择合适单位,如 KB/MB/GB,推荐使用) |
|
| 持续刷新显示,每隔 |
|
| 与 |
|
| 显示高低内存的详细统计(仅部分系统如 CentOS 6 及以下有效) |
|
| 显示版本信息并退出 |
|
| 显示帮助信息并退出 |
|
三、输出解析(核心重点)
以最常用的 free -h 为例,输出格式如下(不同系统略有差异,但核心字段一致):
bash
运行
total used free shared buff/cache available
Mem: 15Gi 2.3Gi 9.8Gi 147Mi 3.4Gi 12Gi
Swap: 16Gi 0B 16Gi1. 行解析
- Mem:物理内存(RAM)的使用情况;
- Swap:交换分区(虚拟内存,硬盘上的空间,用于临时存放物理内存溢出的数据);
- Total(若加
-t):物理内存 + 交换分区的总计。
2. 列解析(重点区分used/free/buff/cache/available)
列名 | 含义 | 关键说明 |
| 总内存容量 | 物理内存:主板安装的总 RAM 大小;Swap:系统配置的交换分区总大小 |
| 已使用内存 | 真正被进程主动占用的内存(不包含 buff/cache) |
| 空闲内存 | 完全未被使用的内存(系统会尽量利用空闲内存做缓存,因此该值通常较小) |
| 共享内存 | 主要用于进程间通信的内存(如 tmpfs 文件系统占用,通常数值较小) |
| 缓冲区 + 缓存内存 | 系统为提升性能分配的内存:- buffer(缓冲区):用于存储即将写入硬盘的数据(如磁盘 IO 的临时缓存);- cache(缓存):用于存储从硬盘读取的文件数据(如频繁访问的程序、文件);这部分内存可被进程随时回收使用,并非真正的 “已用” |
| 可用内存 | 系统实际可分配给新进程的内存(= free + buff/cache 中可回收部分),是判断内存是否充足的核心指标(比 |
关键误区纠正
- 不要认为
free列数值小就是内存不足:Linux 系统会主动用空闲内存做 buff/cache,提升 IO 性能,这部分内存是 “可回收” 的; - 重点看
available列:若该值较大,说明系统内存充足;若该值接近 0,说明内存紧张,可能需要扩容或优化进程。
四、典型示例
1. 人性化格式查看内存(最常用)
bash
运行
free -h- 输出自动适配单位,便于快速阅读,适合日常巡检。
2. 查看内存 + Swap 的总计
bash
运行
free -ht- 输出增加
Total行,显示物理内存 + Swap 的总容量、已用、空闲等。
3. 实时监控内存变化(每 1 秒刷新,共 10 次)
bash
运行
free -h -s 1 -c 10- 适合观察进程运行时的内存占用变化(如测试程序的内存泄漏)。
4. 以 GB 为单位显示内存详情
bash
运行
free -g- 输出全部以 GB 为单位,适合大内存服务器(如 16G、64G 内存)。
五、与内存相关的补充说明
1. 交换分区(Swap)的作用
- Swap 是硬盘上的一块空间,当物理内存不足时,系统会将部分不常用的内存数据写入 Swap,释放物理内存;
- Swap 的读写速度远低于物理内存,若
Swap的used值持续升高,说明物理内存严重不足,会导致系统卡顿(需优先扩容物理内存)。
2. 清理 buff/cache(临时释放内存,仅测试用)
Linux 允许手动释放 buff/cache 内存(生产环境不建议频繁操作,系统会自动管理):
bash
运行
# 释放页缓存、目录项和inode
sync && echo 3 > /proc/sys/vm/drop_cachessync:将 buff 中的数据写入硬盘,避免数据丢失;echo 3:释放 pagecache、dentries 和 inodes(echo 1仅释放 pagecache,echo 2仅释放 dentries 和 inodes)。
3. 查看更详细的内存信息
free 仅展示汇总信息,若需查看单个进程的内存占用,可使用:
top:实时查看进程内存占用(按M排序);ps aux --sort=-%mem:按内存占用率降序显示进程;cat /proc/meminfo:查看系统内存的原始详细数据(free的数据源)。
六、常见问题排查
1. 问题:available 内存接近 0,系统卡顿
- 原因:物理内存被进程占满,系统开始频繁使用 Swap;
- 解决:
- 用
top/ps查找占用内存最高的进程(如内存泄漏的程序),终止或优化; - 临时扩容 Swap 分区(应急);
- 长期解决方案:增加物理内存。
2. 问题:Swap 已用持续升高
- 原因:物理内存不足,或存在内存泄漏的进程;
- 解决:优先排查进程内存占用,其次扩容物理内存(Swap 仅为应急方案)。
3. 问题:free 命令输出与top不一致
- 原因:
free显示的是系统总内存,top显示的是单个进程的内存占用(包含共享内存等); - 说明:属于正常现象,以
free的available和top的进程内存占比结合分析。
七、总结
free 是 Linux 查看内存的基础命令,核心用法是:
- 日常巡检:
free -h(人性化格式,看available和Swap使用情况); - 实时监控:
free -h -s n(持续刷新观察内存变化); - 大内存服务器:
free -g(以 GB 为单位显示)。
使用时需重点关注available列(实际可用内存)和Swap的used列(物理内存是否不足),避免被free列的数值误导。
