0
点赞
收藏
分享

微信扫一扫

Linux命令free 详细介绍


free 是 Linux 系统中用于查看内存(物理内存、交换内存)使用情况的核心命令,能实时展示系统内存的总容量、已用、空闲、缓存、缓冲区等关键指标,是运维和开发人员排查内存瓶颈的常用工具。以下是其详细用法、参数、输出解析及实用技巧:

一、核心功能与语法

1. 基本功能

读取 /proc/meminfo 文件(系统内存的实时状态数据),并以人性化的格式展示物理内存(RAM) 和交换内存(Swap) 的使用情况,支持不同单位(KB、MB、GB 等)显示。

2. 完整语法

bash

运行

free [选项]

  • 无选项时,默认以 KB 为单位显示内存信息;
  • 支持多个选项组合(如 -h -s 2,人性化格式 + 每秒刷新)。

二、常用选项(Options)

选项

功能说明

示例

-b

字节(Bytes) 为单位显示

free -b

-k

千字节(KB) 为单位显示(默认)

free -k

-m

兆字节(MB) 为单位显示

free -m

-g

吉字节(GB) 为单位显示

free -g

-t

显示内存 + 交换分区的总计行(Total)

free -t

-h

人性化格式(自动选择合适单位,如 KB/MB/GB,推荐使用)

free -h

-s <n>

持续刷新显示,每隔 n 秒刷新一次(直到手动终止,按Ctrl+C退出)

free -s 2(每 2 秒刷新)

-c <n>

与 -s 配合,刷新 n 次后自动退出

free -s 2 -c 5(每 2 秒刷新,共 5 次)

-l

显示高低内存的详细统计(仅部分系统如 CentOS 6 及以下有效)

free -l

-V

显示版本信息并退出

free -V

--help

显示帮助信息并退出

free --help

三、输出解析(核心重点)

以最常用的 free -h 为例,输出格式如下(不同系统略有差异,但核心字段一致):

bash

运行

total        used        free      shared  buff/cache   available
Mem:           15Gi       2.3Gi       9.8Gi       147Mi       3.4Gi        12Gi
Swap:          16Gi          0B       16Gi

1. 行解析

  • Mem:物理内存(RAM)的使用情况;
  • Swap:交换分区(虚拟内存,硬盘上的空间,用于临时存放物理内存溢出的数据);
  • Total(若加 -t):物理内存 + 交换分区的总计。

2. 列解析(重点区分used/free/buff/cache/available

列名

含义

关键说明

total

总内存容量

物理内存:主板安装的总 RAM 大小;Swap:系统配置的交换分区总大小

used

已使用内存

真正被进程主动占用的内存(不包含 buff/cache)

free

空闲内存

完全未被使用的内存(系统会尽量利用空闲内存做缓存,因此该值通常较小)

shared

共享内存

主要用于进程间通信的内存(如 tmpfs 文件系统占用,通常数值较小)

buff/cache

缓冲区 + 缓存内存

系统为提升性能分配的内存:- buffer(缓冲区):用于存储即将写入硬盘的数据(如磁盘 IO 的临时缓存);- cache(缓存):用于存储从硬盘读取的文件数据(如频繁访问的程序、文件);这部分内存可被进程随时回收使用,并非真正的 “已用”

available

可用内存

系统实际可分配给新进程的内存(= free + buff/cache 中可回收部分),是判断内存是否充足的核心指标(比free更有参考价值)

关键误区纠正

  • 不要认为 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 的读写速度远低于物理内存,若Swapused值持续升高,说明物理内存严重不足,会导致系统卡顿(需优先扩容物理内存)。

2. 清理 buff/cache(临时释放内存,仅测试用)

Linux 允许手动释放 buff/cache 内存(生产环境不建议频繁操作,系统会自动管理):

bash

运行

# 释放页缓存、目录项和inode
sync && echo 3 > /proc/sys/vm/drop_caches

  • sync:将 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;
  • 解决:
  1. top/ps查找占用内存最高的进程(如内存泄漏的程序),终止或优化;
  2. 临时扩容 Swap 分区(应急);
  3. 长期解决方案:增加物理内存。

2. 问题:Swap 已用持续升高

  • 原因:物理内存不足,或存在内存泄漏的进程;
  • 解决:优先排查进程内存占用,其次扩容物理内存(Swap 仅为应急方案)。

3. 问题:free 命令输出与top不一致

  • 原因:free 显示的是系统总内存,top 显示的是单个进程的内存占用(包含共享内存等);
  • 说明:属于正常现象,以freeavailabletop的进程内存占比结合分析。

七、总结

free 是 Linux 查看内存的基础命令,核心用法是:

  1. 日常巡检:free -h(人性化格式,看availableSwap使用情况);
  2. 实时监控:free -h -s n(持续刷新观察内存变化);
  3. 大内存服务器:free -g(以 GB 为单位显示)。

使用时需重点关注available列(实际可用内存)和Swapused列(物理内存是否不足),避免被free列的数值误导。


举报
0 条评论