一、引言

内存是计算机系统最核心的资源之一,直接影响着程序的运行效率和系统的整体响应速度。

Linux free 命令提供关于物理内存(RAM)和交换空间(Swap)使用情况的概览。free 命令默认输出的是字节数,不够直观。所以,结合用 -h 选项,即 free -h。“human-readable”(人类可读)选项能把内存大小用更友好的单位(GB或MB)显示,一目了然内存概况。

本文对 free -h 命令的输出进行一次全面、深入的剖析。逐一解释报告中的每一个指标,包括 totalusedfreesharedbuff/cache 以及最重要的 available,了解物理内存(Mem)和交换空间(Swap)各自的含义和作用。

要真正理解 free -h 的输出,首先要掌握Linux内存管理的一个核心理念:“空闲内存是浪费的内存”。很多人都直观认为“空闲内存越多越好”,但 Linux 内核的设计是尽可能利用所有可用的物理内存来缓存数据、优化性能。也就是,即使 free 内存看起来很少,系统却运行得非常良好,因为大部分“已使用”的内存实际上是可回收的缓存,随时可以为应用程序所用。基于这一理念,理解 free -h 的各项指标,尤其是 available 内存,对于评估系统性能和进行故障排查有决定性的意义。

二、基本使用和输出结构

运行 free -h系统立即返回当前的内存使用报告。

free -h

输出:

               total        used        free      shared  buff/cache   available
Mem:            15Gi        10Gi       500Mi       200Mi       4.3Gi       4.5Gi
Swap:          2.0Gi       500Mi       1.5Gi

free -h 命令的输出由两行、六列组成,每行代表一种内存类型,每列则表示该类型内存的不同状态。

行:

  • Mem 显示的是 物理内存(RAM) 的使用情况。这是系统最快、最主要的内存资源。
  • Swap 显示的是交换空间(Swap Space) 的使用情况。交换空间是硬盘上的一块区域,被操作系统用作物理内存的扩展,物理内存不足时,系统会把不活跃的数据移到这里。

列:

  • total (物理内存或交换空间)内存的总量。
  • used 内存已被占用的总量。
  • free 内存当前完全空闲未被使用的总量。
  • shared 多个进程之间共享的内存总量。
  • buff/cache 内核用作缓冲区(buffers)和页面缓存(page cache)的内存总量。这部分内存虽然被占用,但可以被系统快速回收供应用程序用。
  • available 应用程序可以立即使用的内存总量,不用系统进行内存交换。

基本关系图:

available (可用内存)的组成

直接可用

可被回收

可供新应用使用

total(总内存)

used(已使用内存)

free(空闲内存)

buff/cache (缓冲区/缓存 内存)

available (可用内存)

新应用程序

三、Mem 行的详细解析

Mem 行是 free -h 命令输出最重要的一部分。

               total        used        free      shared  buff/cache   available
Mem:            15Gi        10Gi       500Mi       200Mi       4.3Gi       4.5Gi
Swap:          2.0Gi       500Mi       1.5Gi

(1)total:总物理内存。是系统安装的全部物理RAM的大小,是计算机硬件上实际插着的内存条的总容量。 注意: 有时,这个值会略小于实际安装的内存容量,因为一部分内存被硬件或内核自身保留用做特殊用途。

(2)used:已使用内存。表示当前被进程、系统内核、各种数据结构占用的内存总量。包括应用程序正在运行所消耗的内存、内核自身运行所用的内存,以及用来磁盘缓存(buff/cache)的内存。

这是一个非常容易引起误解的指标。很多人看到 used 值很高以为系统内存不足,但并不完全准确。Linux 的used 内存包含大量的“可回收”内存(即 buff/cache 部分),这些内存可以随时被系统释放并分配给新的应用程序。所以,高 used 值并不一定意味系统内存紧张。

(3)free:真正空闲内存。是当前完全没有被任何进程、缓存、内核占用的物理内存数量。这部分内存是真正意义上的“闲置”内存。

一个健康、正常运行的Linux系统上,free 内存的值会比较小,甚至看起来非常少。这不是系统内存不足的信号,而是一种高效利用内存的表现。Linux内核会把未使用的内存用做磁盘缓存,加速文件访问和系统响应。如果 free 内存长期保持非常大的值,反而说明系统没有充分利用宝贵的RAM资源。

(4)shared:共享内存。是多个进程之间共享的内存总量。通过共享内存段(System V IPC 或 POSIX 共享内存)或内存映射文件等机制实现。 shared 不是关注的重点,相对稳定,对系统整体内存可用性的影响较小。

(5)buff/cache:缓冲区与页面缓存。表示被内核用来提高磁盘I/O性能的内存总量。这部分内存虽然在技术上是“已使用”的,但其特性是可回收的

  • buffers (缓冲区): 主要用做块设备的元数据和数据块缓存。系统从磁盘读取数据或向磁盘写入数据时,会先把数据存储在缓冲区,减少直接访问慢速磁盘的次数。
  • cache (页面缓存): 主要用做文件系统的数据缓存。应用程序读取文件时,文件内容会被加载到页面缓存中。如果再次读取相同文件,就可以直接从内存中获取,不用再次访问磁盘。

buff/cache 的内存是Linux性能优化的关键。应用程序要更多内存时,内核可以迅速回收这部分缓存内存,重新分配给应用程序使用,不用把数据写入到较慢的交换空间。所以,这部分内存虽然被占用,但可以被视为“弹性可用”的内存。

(6)available:可用内存(最重要的指标)。是评估Linux系统内存可用性最准确、最重要的指标。表示应用程序可以立即使用的内存总量,不用系统进行内存交换。

  • 计算公式:available 内存的计算方式比简单的 free + buff/cache 更为复杂,要考虑各种可回收的内存(包括 free 内存、大部分 buff/cache 内存,以及其他一些可回收的内核内存)。但从概念上理解,可以视为:availablefree + 大部分 buff/cache
  • 为什么重要: 看到 free 内存很少,不必恐慌。真正要关注的是 available 内存。如果 available 内存值较高,系统就有足够的内存来启动新的应用程序或处理现有应用程序的内存需求,不会导致性能下降或触发内存交换。只有当 available 内存持续走低,甚至接近于零,才表明系统面临内存瓶颈。

四、Swap 行的详细解析

除了物理内存,Linux系统还用硬盘上的一部分空间作交换空间

系统内存和swap的关系:

交换空间

物理内存 (RAM)

优先使用

当RAM不足时换出

当需要时换入

耗尽时触发换出

存储换出数据

活动进程/数据

RAM可用空间

不活跃进程/数据

交换文件/分区

RAM

交换空间可以被视为物理内存的“备用”或“溢出”区域。系统物理内存不足时,或者某些程序长时间不活动时,内核会把物理内存中不常用的数据或程序段暂时“交换”到硬盘上的交换空间中,释放出物理内存供更活跃的程序使用。

               total        used        free      shared  buff/cache   available
Mem:            15Gi        10Gi       500Mi       200Mi       4.3Gi       4.5Gi
Swap:          2.0Gi       500Mi       1.5Gi

(1)total:总交换空间。是系统配置的全部交换空间的大小。是硬盘上的一个独立分区或一个交换文件。

(2)used:已使用交换空间。表示当前已被系统存储不活跃数据或因物理内存不足而溢出到硬盘的数据量。持续且较高的 used 交换空间值是一个重要的警示信号,表明系统正在频繁地进行内存交换,是物理内存不足的直接表现。因为硬盘的读写速度远低于RAM,频繁的内存交换会导致系统性能急剧下降,响应变慢,出现“卡顿”现象。

(3)free:空闲交换空间,表示尚未被系统使用的交换空间。在一个内存充足且运行良好的Linux系统中,used 交换空间的值要尽可能低,最好是接近0。free 交换空间的值则要接近 total。这表明系统有足够的物理内存来处理当前的工作负载,不用频繁依赖慢速的硬盘进行内存数据交换。

swap的工作原理:

Linux Swap 工作原理

RAM可用空间减少

Yes

写入硬盘

释放RAM空间

Yes

写入RAM

快速访问

慢速访问

应用程序/数据

物理内存 RAM

内存压力?

触发换出 Swap Out Trigger

选择不活跃内存页

交换空间

应用程序需要访问被换出数据

数据在Swap中?

触发换入 Swap In Trigger

从Swap读取内存页

高性能

低性能

交换空间的 作用:

  • 物理内存不足时的“溢出”机制: 物理内存耗尽时交换空间提供一个后备存储区域,防止应用程序因内存不足而崩溃。
  • 支持系统休眠/挂起。
  • 内核可以把长时间不活跃的进程数据交换到硬盘,释放物理内存给更活跃的进程。

性能影响:

  • 频繁的内存交换让硬盘的访问速度比RAM慢几个数量级。
  • 频繁的交换操作会增加硬盘的读写负载,缩短硬盘寿命。

交换空间更多视为一种“安全网”,而不是日常使用的内存扩展。

memswap的关系:

Linux System Memory Overview (free -h)

Swap Space

Memory (RAM)

可回收

直接可用

低于阈值时触发

从RAM到Swap

填充

需要时换入

从Swap到RAM

填充

Swap Total

RAM Total

RAM Used

RAM Free

RAM Buff/Cache

RAM Shared

RAM Available

Swap Used

Swap Free

Swap Out

内存页换入 Swap In

五、free vs. available vs. buff/cache

free:真正的“空闲”内存;是字面上理解的“空闲”内存,即系统当前完全没有使用,也没有用于任何缓存目的的物理内存。是完全未被触及的内存块。

Linux系统上的free 内存很小。这不是坏事,是Linux内核为优化性能而采取的策略。如果有很多 free 内存,则RAM资源没有被充分利用。

buff/cache:可回收的“已使用”内存;是已经被内核用做缓存文件数据和块设备数据的内存。虽然被标记为“used”的一部分,但本质是可回收的

内核可以迅速地回收这部分 buff/cache 内存,重新分配给应用程序,不用把数据写入慢速的交换空间。

available:应用程序可用的内存;是Linux内核估计的,应用程序在不触发内存交换的情况下,可以立即使用的内存总量。

free 内存很低时,不能判断系统内存不足。应该关注 available 内存。

  • 如果 available 内存值较高,即使 free 内存很低,系统也运行良好,因为有足够的内存可以快速分配给新的进程。
  • 如果 available 内存持续走低,甚至接近于零,那么系统确实面临内存压力,开始频繁使用交换空间,性能下降。

Linux的内存管理策略基于一个核心理念:“未使用的RAM是浪费的RAM”

  • 内核会尽可能利用所有可用的物理内存来缓存磁盘数据。这样,应用程序再次请求相同数据时,可以直接从快速的RAM中获取。
  • 这种缓存机制是弹性的。应用程序需要更多内存时,内核可以快速回收这些缓存内存,重新分配给应用程序。这比直接从硬盘读取数据或进行内存交换要快得多。
  • 优先用RAM作为缓存,可以减少对交换空间的使用。因为交换操作涉及到慢速的硬盘I/O。

六、结语

free -h 是内存监控的首选工具: 快速查看系统物理内存(RAM)和交换空间(Swap)使用情况。

跟 Windows等操作系统不同,Linux倾向尽可能利用所有可用的物理内存来缓存数据,提高系统性能。

available 是评估物理内存可用性的黄金指标:

  • free 内存是真正意义上完全未使用的内存。
  • buff/cache 内存是内核用做磁盘I/O缓存的。
  • available 内存是系统估计的,应用程序可以立即使用的内存总量。

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐