free命令是Linux系统中查看内存使用情况的核心工具,通过它可以快速了解系统物理内存和交换空间(Swap)的分配、使用及空闲状态,掌握free命令结果的解读,对于系统性能监控、故障排查至关重要,本文将结合具体输出示例,详细解析free命令各字段的含义,并提供实际场景下的分析方法。
free命令的基本语法与常用选项
在深入解读结果前,需先了解free命令的基本用法,其常用语法为:free [选项]
核心选项包括:
-h
:以人类可读格式显示(如KB、MB、GB),默认为KB;-m
:以MB为单位显示;-g
:以GB为单位显示;-s
:定时刷新,如free -s 2
每2秒刷新一次;-t
:显示内存总和行,汇总物理内存和Swap的总计;-c
:指定刷新次数,如free -s 1 -c 5
每秒刷新,共5次。
默认情况下,free命令仅显示物理内存和Swap的信息,加入-t
后会额外汇总总内存情况。
free命令结果的核心字段解析
执行free -h
(推荐使用人类可读格式)后,输出通常包含两大部分:物理内存(Mem)和交换空间(Swap),以及可选的内存总和(Total),以下以典型输出为例,逐字段说明:
列名 | 含义说明 | 单位 | 示例值 | 注意事项 |
---|---|---|---|---|
total | 系统总内存(物理内存或Swap)的总量 | GB | 7G | 物理内存总量由硬件决定,Swap总量由管理员配置(如swapfile 或Swap分区)。 |
used | 已使用的内存量 | GB | 1G | 包含应用程序实际占用(App)+ 缓冲/缓存(Buff/Cache)。 |
free | 完全空闲的内存量 | GB | 2G | 纯空闲内存,未被任何进程或系统缓存使用。 |
shared | 被多个进程共享的内存量(如tmpfs、共享内存段) | GB | 0M | 现代系统中占比通常很小,可忽略不计。 |
buff/cache | 缓冲(Buff)和缓存(Cache)的总量 | GB | 4G | Buff:用于存储块设备读写数据的缓冲;Cache:用于加速文件访问的页缓存。 |
available | 实际可供新进程使用的内存量(比free 更准确) |
GB | 5G | 系统会预留部分内存,available 才是“真正可用”的内存,核心参考指标。 |
物理内存(Mem)行
物理内存是系统实际可用的内存,重点关注used
、free
、buff/cache
和available
的关系:
used = App + buff/cache
:used
不仅包含进程占用的内存,还包含系统主动使用的缓存(Linux会尽量将空闲内存用作缓存,以提高性能)。available ≈ free + buff/cache - reserved
:available
是系统动态计算的可供新进程使用的内存,它会预留一部分内存给内核(如slab缓存),因此available
通常大于free
,若available
持续低于500MB,可能预示内存紧张。
交换空间(Swap)行
Swap是硬盘上的一块区域,当物理内存不足时,系统会将不常用的内存数据换出到Swap,释放物理内存给急需的进程,解读Swap时需关注:
used
过高:若Swap使用率持续超过50%,且物理内存的available
长期偏低,说明物理内存不足,系统频繁换页,可能导致性能下降(如应用卡顿)。free
过高:若Swap几乎未使用(free
接近total
),说明物理内存充足,无需担心。
内存总和(Total)行(需-t
选项)
汇总物理内存和Swap的总计,方便快速查看系统总内存资源。
实际场景下的内存状态分析
结合上述字段,可通过以下场景判断系统内存是否健康:
场景1:内存充足(健康状态)
- 物理内存:
available
> 总内存的50%,buff/cache
较高但可接受(Linux默认利用空闲内存作缓存),used
中App占比合理(可通过ps aux --sort=-%mem
查看进程内存占用)。 - Swap:
used
接近0,系统未使用Swap。
示例:
total used free shared buff/cache available
Mem: 7.7G 3.1G 1.2G 1.0M 3.4G 4.5G
Swap: 2.0G 0.0B 2.0G
分析:available
(4.5G)占总内存(7.7G)的58%,Swap未使用,内存充足。
场景2:内存紧张(需关注)
- 物理内存:
available
< 500MB,buff/cache
占比高但App占用也高(如数据库、大内存应用),used
中App占比持续上升。 - Swap:
used
缓慢增长,说明系统开始使用Swap换页。
示例:
total used free shared buff/cache available
Mem: 7.7G 6.8G 0.3G 1.0M 0.6G 0.4G
Swap: 2.0G 1.2G 0.8G
分析:available
仅0.4G,Swap已使用1.2G,说明物理内存不足,需检查高内存进程(如top
命令排序后优化)。
场景3:缓存占用高但内存充足(正常)
- 物理内存:
buff/cache
占比高(如60%以上),但available
仍充足(>总内存50%),used
中App占比较低。 - Swap:未使用。
示例:
total used free shared buff/cache available
Mem: 7.7G 2.0G 0.5G 1.0M 5.2G 5.0G
Swap: 2.0G 0.0B 2.0G
分析:buff/cache
达5.2G,但available
仍有5.0G,说明系统将空闲内存用作缓存,内存充足,无需干预。
FAQs
Q1:free命令中的available
和free
有什么区别?为什么available
通常比free
大?
A:free
是纯空闲内存,未被任何进程或系统模块使用;而available
是系统动态计算的可供新进程使用的内存,它等于free + buff/cache - 系统预留内存
,Linux会主动将空闲内存用作缓存(buff/cache
)以提高性能,因此buff/cache
会占用部分free
,但这些缓存可在进程需要时被释放,所以available
通常大于free
。available
是判断内存是否紧张的核心指标,free
则仅代表“完全未使用”的内存。
Q2:为什么系统内存中buff/cache
很高,但实际运行并不卡顿?
A:buff/cache
包含缓冲(Buff)和缓存(Cache),是Linux系统优化内存使用的重要机制:
- 缓冲(Buff):用于存储块设备(如磁盘)的读写数据,减少磁盘I/O次数;
- 缓存(Cache):用于缓存文件数据,加速文件访问(如读取频繁的文件会被缓存到内存)。
当进程需要内存时,系统会优先释放buff/cache
(通过kswapd
内核线程或直接回收),因此只要available
充足,buff/cache
高不会影响性能,相反,buff/cache
高说明系统在高效利用内存,属于正常现象,只有当buff/cache
高且available
低时,才可能预示内存不足。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/16281.html