第 6 章 · 06 系统资源:`free`、`uptime`、`vmstat`


文档摘要

第 6 章 · 06 系统资源: 、 、 本节摘要:前面几节关注「单个进程」,这一节抬到「系统整体」——内存用了多少、负载高不高、有没有在频繁交换(swap)、CPU 上下文切换是否过频。三个命令各管一块: 看内存(尤其要破除「used 高就是不够」的误解)、 看负载均衡的三个数字、 看虚拟内存与上下文切换的动态变化。它们是「系统健康体检」的基础工具,生产环境排查的第一步往往就是这三个。 内容来源:综合 / / 知识整理,套用体系化模板。 学习目标 阅读完本节,你应当能够: 用 看内存,区分 / / / / ,理解「可用内存看 available」。 解释为什么 Linux 把空闲内存拿来做 buffer/cache(预读、缓存),以及为什么这「不是问题」。

第 6 章 · 06 系统资源:freeuptimevmstat

本节摘要:前面几节关注「单个进程」,这一节抬到「系统整体」——内存用了多少、负载高不高、有没有在频繁交换(swap)、CPU 上下文切换是否过频。三个命令各管一块:free 看内存(尤其要破除「used 高就是不够」的误解)、uptime 看负载均衡的三个数字、vmstat 看虚拟内存与上下文切换的动态变化。它们是「系统健康体检」的基础工具,生产环境排查的第一步往往就是这三个。

内容来源:综合 free/uptime/vmstat 知识整理,套用体系化模板。

学习目标

阅读完本节,你应当能够:

  1. free -h 看内存,区分 used/free/buff/cache/available,理解「可用内存看 available」。
  2. 解释为什么 Linux 把空闲内存拿来做 buffer/cache(预读、缓存),以及为什么这「不是问题」。
  3. 读懂 uptime 的 load average 三个数字,会对比 CPU 核数判断是否过载。
  4. vmstat 看虚拟内存与 CPU 活动的动态变化,重点看 si/so(swap 进出)与 r(运行队列)。
  5. 识别「内存不足导致频繁 swap」与「CPU 过载导致 r 队列长」两种典型问题。

一、设计动机:为什么需要系统级观测

进程级工具(ps/top)告诉你「哪个进程在忙」,但有些问题是「系统整体性」的:内存总量够不够、整个机器是不是过载、是不是在频繁换页。这些问题要靠系统级工具来回答。

这三个命令是互补的:free 看内存静态快照、uptime 看历史负载趋势、vmstat 看动态变化(尤其 swap 与上下文切换)。生产排查时,这三个往往一起敲,从不同侧面判断系统健康状况。

二、free:内存最容易被误读的命令

$ free -h total used free shared buff/cache available Mem: 15Gi 6.0Gi 2.0Gi 0.5Gi 7.0Gi 8.5Gi Swap: 2.0Gi 0B 2.0Gi

各列含义:

  • total:物理内存总量。
  • used:已使用(含被 buffer/cache 占用的部分)。
  • free:完全空闲,这个数字通常很小,别慌。
  • buff/cache:被内核用作磁盘缓冲/页缓存的内存。
  • available:这才是「实际可用」的内存——free 加上「可随时回收的 buffer/cache」。

关键概念:评估内存够不够,看 available,不要看 free。Linux 的设计哲学是「空闲内存就是浪费」,所以它把空闲内存拿来做缓存提升 IO 性能,程序要内存时自动释放。看到 free 只有几百 M 不用慌——只要 available 充足(比如 8.5Gi),系统就健康。

swap:内存不够时的「救命稻草」与「性能陷阱」

Swap 行显示交换分区的使用。当物理内存紧张,内核把不活跃的内存页换到磁盘(swap),腾出物理内存。但磁盘比内存慢几个数量级,频繁 swap 会严重拖慢性能

$ free -h Swap: 2.0Gi 1.8Gi 0.2Gi # swap 用了 1.8G! 说明物理内存严重不足, 在频繁换页

看到 swap 大量使用,要警惕性能下降,并用 vmstatsi/so 确认是否在「频繁换页」。

三、uptime:负载的三个数字

$ uptime 10:30:15 up 5 days, 2 users, load average: 0.50, 0.70, 1.20

load average: 0.50, 0.70, 1.20 是 1 分钟、5 分钟、15 分钟的平均负载

负载的含义:正在运行 + 在就绪队列等 CPU 的进程数的指数移动平均。

判断标准:对比 CPU 核数

  • 负载 < 核数:健康,有空闲。
  • 负载 ≈ 核数:刚好满载。
  • 负载 > 核数:过载,有进程在排队等 CPU。
nproc # 查 CPU 核数, 再对比 load average 判断

三个数字的趋势也有信息:0.50, 0.70, 1.20(1 分钟 < 5 分钟 < 15 分钟)说明负载在下降(刚经历过高峰,正在缓解);1.20, 0.70, 0.50 说明负载在上升(刚开始变忙)。

四、vmstat:动态看虚拟内存与 CPU

vmstat 周期性打印系统状态,适合看「变化趋势」:

$ vmstat 1 3 # 每 1 秒采样一次, 共 3 次 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 200000 500000 600000 0 0 10 20 500 1000 5 2 92 1 2 0 0 180000 500000 620000 0 0 0 0 600 1200 10 3 86 1 5 0 0 150000 500000 650000 20 10 200 50 900 2000 40 10 48 2

关键列:

  • r:运行队列长度(等 CPU 的进程数)。持续大于核数说明 CPU 瓶颈。
  • b:D 状态(不可中断睡眠,通常等 IO)的进程数。持续大于 0 说明 IO 瓶颈。
  • si/so:swap in/out(KB/s)。非零说明在频繁换页,内存不足的明确信号
  • bi/bo:块设备读/写(磁盘 IO)。
  • us/sy/id/wa:用户态/内核态/空闲/等 IO 的 CPU 百分比。

💡 技巧:看 vmstat 重点看三个数字的变化:r 突然涨(CPU 瓶颈)、si/so 从 0 变非 0(开始 swap,内存告急)、wa 持续高(IO 等待严重)。

五、踩坑与排错

坑 1:看到 free 很小就以为内存不够

如前所述,Linux 用空闲内存做缓存,available 不看 free。新手常被 free: 200MB 吓到,实际 available: 8GB,系统健康得很。

坑 2:忽略 swap 的「静默性能杀手」

free -h # 看到 Swap used 才 500M, 觉得"还好" vmstat 1 # 但 si/so 持续几百 KB/s, 说明在频繁换页!

swap 用量不一定大,但频繁换页(si/so 非 0)就会拖慢性能。排查性能问题务必 vmstatsi/so,别只看 free 的 swap 数字。

坑 3:load average 不对比核数

4 核机器 load 3.0 算健康(还有余量);1 核机器 load 3.0 说明严重过载(排了 3 倍队)。nproc 再判断 load

本节要点回顾

  1. free -h 看内存,评估够不够看 available 不看 free——Linux 把空闲内存做缓存是正常设计。
  2. swap 大量使用是内存不足的信号,但更准的指标是 vmstatsi/so 是否非零(频繁换页)。
  3. uptime 的 load average 要对比 CPU 核数:小于核数健康,大于核数过载;三个数字的趋势(1/5/15 分钟)看上升还是下降。
  4. vmstat 1 周期采样看动态,重点看 r(运行队列,CPU 瓶颈)、si/so(swap 频繁,内存瓶颈)、wa(IO 等待)。
  5. 生产排查第一步常是这三个命令组合:free 看内存、uptime 看负载、vmstat 看动态瓶颈。

下一节讲「谁占着资源」的万能排查工具——lsof,它靠的是「文件描述符」这个底层概念。


发布者: 作者: 灏天文库 转发
评论区 (0)
U