查看 Linux 系统内存使用:free 命令实战指南(TIL)

发布时间:2026/10/7 15:23:59
查看 Linux 系统内存使用:free 命令实战指南(TIL) 文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载在排查服务器性能问题、判断是否需要扩容或监控应用内存占用时第一步往往是快速确认系统当前的物理内存RAM使用状况。Linux 自带的free命令可以一行输出总内存、已用、空闲、缓存以及“实际可分配”的内存数据。本文基于 TIL 仓库中 linux/show-used-and-available-system-memory.md 这篇笔记展开完整讲解free的输出字段含义、人性化显示参数-h与--si、常用选项并深入到/proc/meminfo的底层数据来源。读完本文你将能熟练使用free快速判断一台 Linux 主机当前的内存水位并准确理解available与free的区别。free 命令能告诉你什么free命令会显示系统上的物理内存总量total RAM以及其中有多少已被使用used、多少仍然空闲free。直接执行free即可$ free total used free shared buff/cache available Mem: 1000260 166004 552808 14440 281448 664724 Swap: 0 0 0输出分为Mem物理内存和Swap交换分区/交换文件两行每一行又包含六列含义如下列名含义total该行内存的总量Mem 行为物理内存总和Swap 行为交换空间总和used已使用的内存量free完全空闲、未被任何进程或内核使用的内存量shared被共享内存如tmpfs文件系统占用的内存量buff/cache内核缓冲区buffers与页缓存cache之和这部分内存可以在内存压力增大时被内核回收available在不发生换页swapping的前提下可用于启动新应用程序的内存估算值在没有附加选项时数值默认以 KiB1 KiB 1024 字节为单位显示。例如上面示例中total为 1000260 KiB约等于 977 MiB。让输出更可读-h 与 --si默认的 KiB 数值对人不友好尤其内存达到 GB 量级时很难一眼读出。原笔记给出的解决办法是同时加上-h和--si两个参数$ free -h --si total used free shared buff/cache available Mem: 976M 162M 547M 14M 266M 649M Swap: 0B 0B 0B两个参数的分工如下-hhuman-readable自动选择最合适的单位来显示数值让结果直接以 M、G 这样的“人性化”规模呈现。单独使用-h时底层采用的是二进制单位MiB、GiB即基于 1024 的幂。--siInternational System of Units国际单位制强制使用 1000 的幂KB、MB、GB而不是 1024 的幂KiB、MiB、GiB来计算和标注单位。按照man free的说明--si本身不会自动挑选显示单位只有与-h一起使用时才能看到“采用 1000 进制的人性化数字”这正是 TIL 笔记中free -h --si组合出现的原因。对比两组输出可以看到同样一台机器Mem的total从 1000260KiB变成了 976Mfree列从 552808KiB变成 547M一眼即可判断系统当前的内存富余程度。Swap 因为总量为 0显示为0B。指定输出单位-b / -k / -m / -g如果你希望输出固定单位的数值例如在脚本中做数值比较或按 GB 汇报给监控系统free也提供了显式指定单位的选项选项单位-b, --bytes字节bytes-k, --kibiKiB1024 字节-m, --mebiMiB-g, --gibiGiB例如$ free -m total used free shared buff/cache available Mem: 976 162 539 14 274 649 Swap: 0 0 0-m会把所有数值换算为 MiB 显示适合在脚本中直接按固定单位解析列值。其他实用选项总量、宽输出与持续观察man free中还提供了几个在排查场景中很常用的选项-t, --total在 Mem 与 Swap 两行之下追加一行Total给出物理内存与交换空间的合计值方便评估整机内存规模。-w, --wide宽输出模式。默认情况下buff/cache是合并的一列加-w后该列会被拆分为独立的buffers与cache两列便于分别观察内核缓冲区与页缓存的体量。-s, --seconds N每隔 N 秒刷新一次输出配合-c, --count N显示 N 次后停止可以像简易监控一样持续观察内存变化。例如$ free -h -s 2 -c 3这条命令会每 2 秒输出一次人性化格式的内存数据共输出 3 次适合在运行内存密集型任务时观察内存增长趋势。理解 available 与 free 的关键区别很多初学者会直接用free列判断“还有多少内存”这往往会产生误判。原因在于free列只统计完全没有被使用的内存而buff/cache列所代表的页缓存与缓冲区是内核为了加速磁盘 I/O 主动占用的内存当新的进程申请内存时内核可以回收这部分内存供其使用。available列正是对这一点的修正。按照man free的定义available是“在不发生换页的前提下可用于启动新应用程序的内存估算值”它同时考虑了可回收的页缓存以及部分仍在占用、暂时无法回收的内存 slab。因此在绝大多数场景下判断“系统还剩多少内存可用”应当以available列为准而不是free列。结合上面的示例可以直观理解free只有 547M但available高达 649M两者相差的正是可回收的buff/cache266M中的一部分。底层原理数据来自 /proc/meminfofree并不是自己去采样内存而是解析 Linux 内核通过虚拟文件系统导出的内存信息。man free明确说明该命令的信息是parsing/proc/meminfo得到的。也就是说你可以直接查看这个文件来获得更原始、更细粒度的内存数据$ cat /proc/meminfo | head -n 10 MemTotal: 1000260 kB MemFree: 552808 kB MemAvailable: 664724 kB Buffers: 28160 kB Cached: 253288 kB SwapTotal: 0 kB SwapFree: 0 kB .../proc/meminfo中与free各列对应的关键字段包括MemTotal→free的Mem/totalMemFree→free的Mem/freeMemAvailable→free的Mem/availableBuffers与Cached→ 合起来对应free的buff/cache使用-w宽输出时二者分开显示SwapTotal/SwapFree→free的Swap行理解了这一层你在脚本中可以直接读取/proc/meminfo的MemAvailable等字段做内存监控逻辑与free完全一致且免去解析表格的麻烦。在本仓库中的位置与相关笔记这篇笔记收录于 TIL 仓库的 linux 目录 下文件路径为 linux/show-used-and-available-system-memory.md同时在仓库 README.md 的 Linux 分类索引中登记有对应条目。如果你正在排查服务器状态同目录下的 linux/show-current-system-time-and-settings.md使用timedatectl查看系统时间与 NTP 设置和 linux/check-ubuntu-version.md查看系统发行版版本也属于同一类“快速确认环境状态”的运维操作可以一并参考。小结直接运行free即可查看内存总量、已用、空闲、共享、缓存以及 availablefree -h --si是最常用的“人性化”读法前者自动选单位、后者切换到 1000 进制判断实际可分配内存请优先看available列它与free列的差值来自可回收的页缓存与缓冲区-t、-w、-s/-c等选项可满足汇总、细分列、持续观察等不同场景free的数据源是内核导出的/proc/meminfo需要更底层数据时可直接解析该文件更完整的参数说明参见man free。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐5分钟快速上手SankeyMATIC免费桑基图制作终极指南5分钟快速上手SankeyMATIC免费桑基图制作终极指南 想要制作专业级的桑基图却不懂复杂的数据可视化工具SankeyMATIC正是你需要的完美解决方案Linux free 命令详解内存使用情况查看与 buffers/cache 深度解析Linux free 命令详解内存使用情况查看与 buffers/cache 深度解析 free 是 Linux 系统管理中查看物理内存与交换分区使用情况的核文档教程一次改写去掉 AI 味Humanizer 33 类文风模式检测完整指南一次改写去掉 AI 味Humanizer 33 类文风模式检测完整指南 AI 初稿一眼看上去没毛病但破折号、delve、「in order to」一出来就假AI 技能AI 写作创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考