searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

free -h 深度解析:Ubuntu 内存查看的黄金命令与输出字段详解

2026-06-02 17:46:35
0
0

一、为什么是 free -h?

free 命令本身的功能非常直接:展示系统内存的使用情况,包括物理内存(RAM)和交换空间(Swap)。但如果不加任何选项,它会以字节为单位输出一串冷冰冰的数字,对人类极其不友好。

-h 选项的全称是 --human-readable,它会自动把数值转换成 GB、MB 等人类一眼就能看懂的单位。所以 free -h 就成了 Ubuntu 系统中查看内存的"黄金命令"。

此外,你还可以使用 -m 以 MB 为单位显示,使用 -g 以 GB 为单位显示,使用 -s 3 每隔 3 秒刷新一次,动态观察内存变化趋势。但对于大多数场景,free -h 一次性输出,已经足够了。


二、输出结果全景拆解

执行 free -h 后,你会看到类似这样的输出:

1              total   used   free   shared  buff/cache   available
2Mem:          7.7G   1.2G   5.2G   123M    1.3G        6.0G
3Swap:         2.0G   0B     2.0G

这张表由两行、六列组成。第一行 Mem: 展示的是物理内存(RAM)的使用情况,第二行 Swap: 展示的是交换空间的使用情况。下面我们逐个字段深入剖析。


三、Mem 行:六大字段逐个击破

1. total——总内存,一切的起点

total 表示系统安装的全部物理内存总量。比如显示 7.7G,就说明你的机器上插着总共 7.7GB 的内存条。需要注意的是,这个值有时会略小于你实际购买的内存容量,因为有一小部分被硬件或内核自身保留,用于特殊用途(比如显卡映射、BIOS 保留等)。

2. used——最容易被误解的数字

used 表示当前已被占用的内存总量。这个数字包含了三部分:应用程序实际使用的内存、内核自身运行所需的内存、以及缓冲与缓存占用的内存。

这就是误解的根源所在。 很多人一看到 used 占了好几个 G,就慌了神,觉得内存不够用了。但实际上,used 里面有很大一部分是缓存(buff/cache),这部分内存是可以被随时回收的。所以,单独看 used 来判断内存是否紧张,是完全错误的。

3. free——真正的"闲置",但少才是正常的

free 表示当前完全没有被任何进程、缓存、内核占用的物理内存数量。注意关键词:完全空闲

这里就体现出 Linux 内存管理哲学的精髓了——"空闲内存就是浪费的内存"。Linux 内核会尽可能把所有空闲内存拿来做磁盘缓存,加速文件读写。所以在一个健康运行的系统上,free 的值通常会很小,甚至只有几百 MB。这不是内存不足的信号,恰恰相反,这是系统在高效运转的证明。

如果你的 free 长期保持在很高的值,反而说明系统没有充分利用宝贵的 RAM 资源,性能可能并不理想。

4. shared——多进程共享的内存

shared 表示多个进程之间共享的内存总量,通常通过共享库(如 /dev/shm)或内存映射文件等机制实现。这个值一般比较小,对整体内存可用性的影响微乎其微,了解即可,不必过度关注。

5. buff/cache——性能提升的幕后英雄

这是整个输出中最具技术含量的字段。buff/cache 是缓冲(buffers)和缓存(cache)占用的内存总和,这部分内存虽然被"占用"了,但它是可回收的弹性资源

具体来说:

  • Buffers(缓冲):主要用于块设备的元数据和数据块缓存。系统从磁盘读取或写入数据时,会先把数据暂存在缓冲区,减少直接访问慢速磁盘的次数。
  • Cache(页面缓存):主要用于文件系统的数据缓存。你读过一次的文件,其内容会被留在页面缓存中。下次再读同一个文件,直接从内存拿,速度可以提升几十倍甚至上百倍。

根据实测数据对比:文件读取操作,无缓存时耗时约 10ms,有缓存时仅需 0.1ms,性能提升达 100 倍;程序启动从 500ms 缩短到 200ms;数据库查询从 50ms 降至 5ms。这些数字足以说明缓存机制对系统性能的巨大贡献。

当应用程序需要更多内存时,内核会立即回收这部分缓存,重新分配给应用使用,整个过程对上层应用完全透明。 所以 buff/cache 占用高,不代表内存紧张,反而可能说明系统正在进行大量 I/O 操作。

6. available——真正的核心指标!

如果整篇文章你只能记住一个数字,那就是 available

available 表示系统估算的、可以立即分配给新应用程序的内存总量,不包括交换空间。它的计算方式大致为:available ≈ free + 可回收的 buff/cache

在早期的 Linux 内核中,并没有 available 这个字段。人们只能用 free + buffers + cache 来估算可用内存,但这个公式并不精确,因为并非所有缓存都能被回收(比如某些共享内存和 tmpfs 使用的缓存)。从 Linux 3.14 内核开始,引入了 MemAvailable 字段,free 命令的 available 列正是来源于 /proc/meminfo 中的这个值。

判断系统内存是否健康,唯一应该盯着看的就是 available 如果 available 持续低于总内存的 10%,才提示潜在的内存压力。而在上面的示例中,available 达到 6.0G,说明系统有充足的内存可以应对新任务,完全不必担心。


四、Swap 行:虚拟内存的"备用仓库"

Swap 行展示的是交换空间的使用情况,它是硬盘上划分出来的一块区域,充当物理内存的"溢出缓冲区"。

  • total:交换空间总量。
  • used:当前已使用的交换空间。如果这个值不为零,说明系统已经开始把物理内存中不活跃的数据转移到硬盘上了。
  • free:剩余的交换空间。

Swap 的读写速度比物理内存慢几个数量级。如果 Swap used 持续为零,说明你的物理内存绰绰有余;如果 Swap used 持续增长,并且 si/so(swap in/out 频率)居高不下,那才是真正需要警惕的信号。


五、实战:如何判断内存是否真的不够用?

根据长期的运维经验,我总结了一套判断标准:

指标 健康状态 危险信号
available 大于总内存的 20% 持续低于总内存的 10%
Swap used 0B 持续增长且 si/so 频率高
free 数值小(正常) 数值大反而需注意(说明缓存未被利用)
used 数值高不代表问题 需结合 available 综合判断

一句话总结:不要看 used,不要看 free,只看 available。


六、进阶工具:不止 free 一个选择

虽然 free -h 是最快捷的方式,但在某些场景下,你还需要更精细的工具:

vmstat:提供虚拟内存、进程、CPU 活动的综合统计。使用 vmstat -s 可以查看内存使用的详细汇总,使用 vmstat 5 可以每 5 秒刷新一次,观察趋势。

top:实时展示系统中各进程的资源占用情况。进入 top 后按 Shift+M 可以按内存使用量对进程排序,迅速定位"吃内存大户"。

htop:top 的增强版,界面更友好,支持鼠标操作,颜色区分更直观。需要先通过包管理器安装。

/proc/meminfo:这是所有内存工具的数据源头。free 命令的数据正是从这里读取的。直接查看这个文件,可以获得 MemTotal、MemFree、MemAvailable、Buffers、Cached、SwapCached 等最原始的详细信息。

smem:一个更专业的内存分析工具,它能报告 USS(进程独占内存)、PSS(按比例计算的共享内存)、RSS(进程占用的全部物理内存)等精细指标,适合做深度的内存归因分析。


七、高阶操作:手动调优的两把利刃

1. 清理缓存(慎用)

在某些调试场景下,你可能需要手动释放缓存:

  • 释放页面缓存:向 /proc/sys/vm/drop_caches 写入 1
  • 释放页面缓存和 inode:写入 2
  • 释放页面缓存、dentries 和 inodes:写入 3

但请注意:这会让系统性能瞬间下降,因为缓存被清空后,所有文件读取都要回到磁盘。仅在特殊调试需求时使用,生产环境中千万不要把这当成常规操作。

2. 调整 swappiness

swappiness 参数控制内核使用 Swap 的倾向,取值范围 0 到 100。默认值通常是 60。

  • 服务器环境建议设为 10~30,尽量少用 Swap
  • 桌面环境可以设为 30~60,兼顾响应速度
  • 数据库服务器建议设为 1~10,几乎不用 Swap

查看当前值:cat /proc/sys/vm/swappiness。临时修改可以通过 sysctl 命令,永久修改则写入 /etc/sysctl.conf


八、常见误区一网打尽

误区一:"used 内存高 = 内存不够"
错。used 包含大量可回收的缓存,缓存会在应用需要时自动释放。

误区二:"free 内存少 = 需要加内存"
错。free 少是 Linux 高效利用内存的表现。应该看 available。

误区三:"Swap 被使用 = 内存不够"
不一定。Linux 有时会预分配 Swap 空间,偶尔使用 Swap 并不代表系统有问题。但如果 Swap 使用持续增长,就需要认真对待了。

误区四:"buff/cache 占用高是坏事"
恰恰相反。高 buff/cache 说明系统在积极利用空闲内存提升 I/O 性能,这是好事。


结语

free -h 看似只有短短几列数字,但它背后折射出的是 Linux 内核精妙的内存管理哲学。理解了 available 的真正含义,你就掌握了判断系统内存健康状况的金钥匙。下次再敲下 free -h 的时候,希望你不再被那些数字迷惑,而是一眼看穿系统的真实状态。

记住:在 Linux 的世界里,真正重要的从来不是"用了多少",而是"还能给多少"。

0条评论
0 / 1000
c****t
906文章数
1粉丝数
c****t
906 文章 | 1 粉丝
原创

free -h 深度解析:Ubuntu 内存查看的黄金命令与输出字段详解

2026-06-02 17:46:35
0
0

一、为什么是 free -h?

free 命令本身的功能非常直接:展示系统内存的使用情况,包括物理内存(RAM)和交换空间(Swap)。但如果不加任何选项,它会以字节为单位输出一串冷冰冰的数字,对人类极其不友好。

-h 选项的全称是 --human-readable,它会自动把数值转换成 GB、MB 等人类一眼就能看懂的单位。所以 free -h 就成了 Ubuntu 系统中查看内存的"黄金命令"。

此外,你还可以使用 -m 以 MB 为单位显示,使用 -g 以 GB 为单位显示,使用 -s 3 每隔 3 秒刷新一次,动态观察内存变化趋势。但对于大多数场景,free -h 一次性输出,已经足够了。


二、输出结果全景拆解

执行 free -h 后,你会看到类似这样的输出:

1              total   used   free   shared  buff/cache   available
2Mem:          7.7G   1.2G   5.2G   123M    1.3G        6.0G
3Swap:         2.0G   0B     2.0G

这张表由两行、六列组成。第一行 Mem: 展示的是物理内存(RAM)的使用情况,第二行 Swap: 展示的是交换空间的使用情况。下面我们逐个字段深入剖析。


三、Mem 行:六大字段逐个击破

1. total——总内存,一切的起点

total 表示系统安装的全部物理内存总量。比如显示 7.7G,就说明你的机器上插着总共 7.7GB 的内存条。需要注意的是,这个值有时会略小于你实际购买的内存容量,因为有一小部分被硬件或内核自身保留,用于特殊用途(比如显卡映射、BIOS 保留等)。

2. used——最容易被误解的数字

used 表示当前已被占用的内存总量。这个数字包含了三部分:应用程序实际使用的内存、内核自身运行所需的内存、以及缓冲与缓存占用的内存。

这就是误解的根源所在。 很多人一看到 used 占了好几个 G,就慌了神,觉得内存不够用了。但实际上,used 里面有很大一部分是缓存(buff/cache),这部分内存是可以被随时回收的。所以,单独看 used 来判断内存是否紧张,是完全错误的。

3. free——真正的"闲置",但少才是正常的

free 表示当前完全没有被任何进程、缓存、内核占用的物理内存数量。注意关键词:完全空闲

这里就体现出 Linux 内存管理哲学的精髓了——"空闲内存就是浪费的内存"。Linux 内核会尽可能把所有空闲内存拿来做磁盘缓存,加速文件读写。所以在一个健康运行的系统上,free 的值通常会很小,甚至只有几百 MB。这不是内存不足的信号,恰恰相反,这是系统在高效运转的证明。

如果你的 free 长期保持在很高的值,反而说明系统没有充分利用宝贵的 RAM 资源,性能可能并不理想。

4. shared——多进程共享的内存

shared 表示多个进程之间共享的内存总量,通常通过共享库(如 /dev/shm)或内存映射文件等机制实现。这个值一般比较小,对整体内存可用性的影响微乎其微,了解即可,不必过度关注。

5. buff/cache——性能提升的幕后英雄

这是整个输出中最具技术含量的字段。buff/cache 是缓冲(buffers)和缓存(cache)占用的内存总和,这部分内存虽然被"占用"了,但它是可回收的弹性资源

具体来说:

  • Buffers(缓冲):主要用于块设备的元数据和数据块缓存。系统从磁盘读取或写入数据时,会先把数据暂存在缓冲区,减少直接访问慢速磁盘的次数。
  • Cache(页面缓存):主要用于文件系统的数据缓存。你读过一次的文件,其内容会被留在页面缓存中。下次再读同一个文件,直接从内存拿,速度可以提升几十倍甚至上百倍。

根据实测数据对比:文件读取操作,无缓存时耗时约 10ms,有缓存时仅需 0.1ms,性能提升达 100 倍;程序启动从 500ms 缩短到 200ms;数据库查询从 50ms 降至 5ms。这些数字足以说明缓存机制对系统性能的巨大贡献。

当应用程序需要更多内存时,内核会立即回收这部分缓存,重新分配给应用使用,整个过程对上层应用完全透明。 所以 buff/cache 占用高,不代表内存紧张,反而可能说明系统正在进行大量 I/O 操作。

6. available——真正的核心指标!

如果整篇文章你只能记住一个数字,那就是 available

available 表示系统估算的、可以立即分配给新应用程序的内存总量,不包括交换空间。它的计算方式大致为:available ≈ free + 可回收的 buff/cache

在早期的 Linux 内核中,并没有 available 这个字段。人们只能用 free + buffers + cache 来估算可用内存,但这个公式并不精确,因为并非所有缓存都能被回收(比如某些共享内存和 tmpfs 使用的缓存)。从 Linux 3.14 内核开始,引入了 MemAvailable 字段,free 命令的 available 列正是来源于 /proc/meminfo 中的这个值。

判断系统内存是否健康,唯一应该盯着看的就是 available 如果 available 持续低于总内存的 10%,才提示潜在的内存压力。而在上面的示例中,available 达到 6.0G,说明系统有充足的内存可以应对新任务,完全不必担心。


四、Swap 行:虚拟内存的"备用仓库"

Swap 行展示的是交换空间的使用情况,它是硬盘上划分出来的一块区域,充当物理内存的"溢出缓冲区"。

  • total:交换空间总量。
  • used:当前已使用的交换空间。如果这个值不为零,说明系统已经开始把物理内存中不活跃的数据转移到硬盘上了。
  • free:剩余的交换空间。

Swap 的读写速度比物理内存慢几个数量级。如果 Swap used 持续为零,说明你的物理内存绰绰有余;如果 Swap used 持续增长,并且 si/so(swap in/out 频率)居高不下,那才是真正需要警惕的信号。


五、实战:如何判断内存是否真的不够用?

根据长期的运维经验,我总结了一套判断标准:

指标 健康状态 危险信号
available 大于总内存的 20% 持续低于总内存的 10%
Swap used 0B 持续增长且 si/so 频率高
free 数值小(正常) 数值大反而需注意(说明缓存未被利用)
used 数值高不代表问题 需结合 available 综合判断

一句话总结:不要看 used,不要看 free,只看 available。


六、进阶工具:不止 free 一个选择

虽然 free -h 是最快捷的方式,但在某些场景下,你还需要更精细的工具:

vmstat:提供虚拟内存、进程、CPU 活动的综合统计。使用 vmstat -s 可以查看内存使用的详细汇总,使用 vmstat 5 可以每 5 秒刷新一次,观察趋势。

top:实时展示系统中各进程的资源占用情况。进入 top 后按 Shift+M 可以按内存使用量对进程排序,迅速定位"吃内存大户"。

htop:top 的增强版,界面更友好,支持鼠标操作,颜色区分更直观。需要先通过包管理器安装。

/proc/meminfo:这是所有内存工具的数据源头。free 命令的数据正是从这里读取的。直接查看这个文件,可以获得 MemTotal、MemFree、MemAvailable、Buffers、Cached、SwapCached 等最原始的详细信息。

smem:一个更专业的内存分析工具,它能报告 USS(进程独占内存)、PSS(按比例计算的共享内存)、RSS(进程占用的全部物理内存)等精细指标,适合做深度的内存归因分析。


七、高阶操作:手动调优的两把利刃

1. 清理缓存(慎用)

在某些调试场景下,你可能需要手动释放缓存:

  • 释放页面缓存:向 /proc/sys/vm/drop_caches 写入 1
  • 释放页面缓存和 inode:写入 2
  • 释放页面缓存、dentries 和 inodes:写入 3

但请注意:这会让系统性能瞬间下降,因为缓存被清空后,所有文件读取都要回到磁盘。仅在特殊调试需求时使用,生产环境中千万不要把这当成常规操作。

2. 调整 swappiness

swappiness 参数控制内核使用 Swap 的倾向,取值范围 0 到 100。默认值通常是 60。

  • 服务器环境建议设为 10~30,尽量少用 Swap
  • 桌面环境可以设为 30~60,兼顾响应速度
  • 数据库服务器建议设为 1~10,几乎不用 Swap

查看当前值:cat /proc/sys/vm/swappiness。临时修改可以通过 sysctl 命令,永久修改则写入 /etc/sysctl.conf


八、常见误区一网打尽

误区一:"used 内存高 = 内存不够"
错。used 包含大量可回收的缓存,缓存会在应用需要时自动释放。

误区二:"free 内存少 = 需要加内存"
错。free 少是 Linux 高效利用内存的表现。应该看 available。

误区三:"Swap 被使用 = 内存不够"
不一定。Linux 有时会预分配 Swap 空间,偶尔使用 Swap 并不代表系统有问题。但如果 Swap 使用持续增长,就需要认真对待了。

误区四:"buff/cache 占用高是坏事"
恰恰相反。高 buff/cache 说明系统在积极利用空闲内存提升 I/O 性能,这是好事。


结语

free -h 看似只有短短几列数字,但它背后折射出的是 Linux 内核精妙的内存管理哲学。理解了 available 的真正含义,你就掌握了判断系统内存健康状况的金钥匙。下次再敲下 free -h 的时候,希望你不再被那些数字迷惑,而是一眼看穿系统的真实状态。

记住:在 Linux 的世界里,真正重要的从来不是"用了多少",而是"还能给多少"。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0