free命令

free命令是Linux系统中用于查看内存(物理内存+交换分区Swap)使用状态的核心工具,可快速获取内存总大小、空闲量、使用量、缓存占用等关键信息,与top命令的内存统计功能互补——top侧重实时动态监控,free侧重静态快照查询,适合快速排查内存基础问题,操作简单且输出直观。

一、free命令基础使用

1.1 基本语法

# 基础用法:直接执行free,默认以KiB为单位显示
free

# 完整语法
free [选项参数]

1.2 核心选项参数

free命令选项较少但实用性强,核心用于切换单位、优化显示格式,常用选项如下:

-b:以字节(Bytes)为单位显示
-k:以千字节(KiB,1KiB=1024Bytes)为单位显示(默认)
-m:以兆字节(MiB)为单位显示(最常用,适配常规服务器内存规模)
-g:以吉字节(GiB)为单位显示(适合大内存服务器)
-h:以人类可读(Human-readable)格式显示,自动适配单位(推荐日常使用)
-t:在输出末尾添加“总计”行,汇总物理内存+Swap的总大小、使用量、空闲量
-s <秒数>:持续刷新内存状态,每指定秒数刷新一次(类似top的实时性,需手动Ctrl+C退出)
-c <次数>:配合-s使用,指定刷新次数后自动退出(避免无限刷新)

二、free命令输出界面解读

以最常用的 free -h 命令为例,输出结果分为物理内存(Mem)、交换分区(Swap)两部分,部分系统会额外显示缓冲区内存(Buffers)和缓存内存(Cache),以下逐字段详细说明:

               total        used        free      shared  buff/cache   available
Mem:           15Gi       1.8Gi       12Gi       128Mi       1.6Gi        13Gi
Swap:          8.0Gi          0B       8.0Gi

若执行默认 free 命令(无-h选项),单位为KiB,输出结构一致,仅数值单位不同:

               total        used        free      shared  buff/cache   available
Mem:        16250880     1894528    12580352      131072     1776000    14086400
Swap:       8388608           0     8388608

2.1 物理内存(Mem)字段解读

  • total:物理内存总大小(服务器实际安装的内存容量,扣除内核占用的基础内存后的值);
  • used:已使用的物理内存大小,包含应用程序占用、内核占用、缓冲区、缓存(注意:并非完全“被占用且无法回收”);
  • free:完全空闲的物理内存,无任何进程或内核使用,可直接分配给应用;
  • shared:多个进程共享的内存大小(如共享库、临时文件共享内存,通常占比极低);
  • buff/cache:缓冲区(Buffers)和缓存(Cache)的总占用大小(核心易混淆点,可被系统回收):
    • Buffers(缓冲区):用于存储内核与块设备(硬盘、U盘)交互的数据,临时缓存待写入磁盘的数据,提升I/O效率;
    • Cache(缓存):用于存储从磁盘读取的数据,下次访问时可直接从内存读取,减少磁盘I/O,如读取日志文件、配置文件后会缓存至此处。
  • available:可实际分配给应用程序的内存大小(核心参考指标),计算公式≈free + buff/cache中可回收部分,排除了内核占用、不可回收缓存,能真实反映系统剩余可用内存。

2.2 交换分区(Swap)字段解读

Swap分区是硬盘上划分的一块空间,作为物理内存的补充,当物理内存不足时,系统会将部分不常用进程的内存数据写入Swap,释放物理内存给活跃进程,字段含义如下:

  • total:Swap分区总大小;
  • used:已使用的Swap空间大小(核心监控指标,若持续增长,说明物理内存不足);
  • free:空闲的Swap空间大小。

注意:Swap基于硬盘存储,读写速度远慢于物理内存,频繁使用Swap会导致系统卡顿、响应变慢,需及时排查内存泄漏或扩容物理内存。

2.3 总计行(-t选项补充)

执行 free -ht 命令,会在输出末尾添加Totals行,汇总Mem和Swap的总容量、使用量、空闲量,便于快速统计整体内存资源:

               total        used        free      shared  buff/cache   available
Mem:           15Gi       1.8Gi       12Gi       128Mi       1.6Gi        13Gi
Swap:          8.0Gi          0B       8.0Gi
Total:         23Gi       1.8Gi       20Gi       128Mi       1.6Gi        13Gi

三、free命令常用场景示例

3.1 日常快速查看内存状态(推荐)

free -h  # 可读格式,快速了解内存整体使用情况
# 输出直观,适合日常巡检、快速排查内存是否紧张

3.2 持续监控内存变化(类似top内存监控)

free -hs 2  # 每2秒刷新一次内存状态,以人类可读格式显示
free -hs 3 -c 5  # 每3秒刷新一次,共刷新5次后自动退出(适合脚本捕获)

3.3 统计内存+Swap总资源

free -ht  # 显示总计行,便于统计服务器整体内存资源规模
# 适合汇报、文档记录内存配置及使用情况

3.4 精确查看字节级内存(适合脚本处理)

free -b  # 以字节为单位输出,数值精确,适合脚本解析、计算内存使用率
# 示例:提取物理内存总大小(脚本片段)
free -b | grep Mem | awk '{print $2}'

四、关键误区与注意事项

  1. 误区:认为“used内存占比高即内存不足” 实际需重点关注 available 字段,而非used字段。若buff/cache占比高,即使used占比高,available仍充足,系统可回收缓存供应用使用,不属于内存不足。
  2. Swap使用需警惕 若Swap used值持续大于0且增长,说明物理内存已无法满足需求,需排查是否存在内存泄漏进程(结合top、ps命令),或考虑扩容物理内存。
  3. 单位换算注意 free命令默认使用1024进制(1GiB=1024MiB),而非硬盘厂商常用的1000进制,避免与硬盘容量换算混淆。
  4. 缓存回收(临时应急) 当available内存不足时,可手动回收缓存(非必要不操作,系统会自动管理): sync # 先将缓冲区数据写入磁盘,避免数据丢失 ``echo 3 > /proc/sys/vm/drop_caches # 回收页缓存、目录项缓存、inode缓存
  5. 与其他命令配合使用 free仅显示内存整体状态,若需定位具体进程内存占用,需结合top(按M排序)、ps(ps aux --sort=-%mem)等命令,形成完整排查链路。
posted @ 2026-01-26 16:54  向闲而过  阅读(4)  评论(0)    收藏  举报