菜鸟科技网

linux命令 vmstat

vmstatVirtual Memory Statistics(虚拟内存统计)的缩写,它是一个强大的工具,用于报告关于进程、内存、分页、块 I/O、陷阱和 CPU 活动的摘要信息。

linux命令 vmstat-图1
(图片来源网络,侵删)

基本语法和选项

vmstat 命令的基本语法如下:

vmstat [options] [delay [count]]

参数说明:

  • [delay]: 两次报告之间的时间间隔(以秒为单位),如果指定了延迟,vmstat 将会持续地生成报告,直到你按下 Ctrl+C
  • [count]: 报告的次数,如果指定了 delaycountvmstat 将会生成指定次数的报告,然后退出,如果只指定了 delay,它会无限运行。

常用选项:

  • -a--active: 显示活跃和非活跃内存,这对于理解内存的真实使用情况非常有帮助。
  • -s 或 --: 显示事件计数器和内存的统计摘要,而不是报告平均值。
  • -m 或 --slabs: 显示 slab 信息,Slab 是 Linux 内核中用于管理频繁分配和释放的小对象的一种内存管理机制。
  • -d 或 --disk: 显示磁盘统计信息。
  • -p 或 --partition: 显示特定分区的磁盘统计信息。
  • -S 或 --unit:CHAR: 指定显示的单位。S 表示 KB,k 表示 1024 字节,m 表示 MB。
  • -t 或 --timestamp: 在每一行报告前显示时间戳。

输出字段详解

vmstat 的输出分为几个部分,我们逐一解析。

linux命令 vmstat-图2
(图片来源网络,侵删)

1 默认输出(不带任何参数)

当你直接输入 vmstat 时,它会显示系统自启动以来的平均值。

$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  41812  80108 394836    0    0    10     8   10   18  1  1 97  0  0

procs (进程) 部分:

  • r: 运行队列中正在等待运行的进程数,这是衡量系统负载的关键指标,如果这个值持续大于 CPU 的核心数,说明系统可能过载。
  • b: 等待 I/O 操作(如磁盘读写)的进程数,如果这个值很高,说明系统可能在等待 I/O,可能是磁盘瓶颈。

memory (内存) 部分:

  • swpd: 使用的虚拟内存(交换空间)总量,单位为 KB,如果这个值不为零,说明系统已经开始使用交换空间了。
  • free: 空闲的内存总量,单位为 KB。
  • buff: 用于缓冲区的内存总量,单位为 KB,这些内存用于文件系统元数据等。
  • cache: 用于页缓存的内存总量,单位为 KB,这是 Linux 用来缓存文件数据的内存,可以显著提高文件读取速度。

swap (交换) 部分:

linux命令 vmstat-图3
(图片来源网络,侵删)
  • si: 从磁盘交换到内存的数据量(Swap In),单位为 KB/s,这个值通常应该接近于 0。
  • so: 从内存交换到磁盘的数据量(Swap Out),单位为 KB/s,这个值通常也应该接近于 0。siso 持续很高,说明物理内存严重不足,系统正在频繁地进行换页,这会严重影响性能。

io (输入/输出) 部分:

  • bi: 从块设备(如磁盘)读取的数据量,单位为 块/s,通常指块设备。
  • bo: 写入到块设备的数据量,单位为 块/s,这两个值可以帮助你判断磁盘 I/O 是否繁忙。

system (系统) 部分:

  • in: 每秒发生的“中断”次数,包括时钟中断。
  • cs: 每秒发生的“上下文切换”次数,当 CPU 需要从一个进程切换到另一个进程时就会发生上下文切换,频繁的上下文切换(每秒上万次)可能意味着系统负载过高。

cpu (CPU) 部分:

  • us: 用户空间占用 CPU 的百分比,执行用户程序(如你的应用程序)所花费的时间。
  • sy: 内核空间占用 CPU 的百分比,执行内核系统调用所花费的时间。
  • id: CPU 空闲的百分比。
  • wa: 等待 I/O 操作所花费的 CPU 时间百分比,如果这个值很高,说明 CPU 在等待磁盘。
  • st: 虚拟机被 Hypervisor(虚拟机监视器)偷走的 CPU 时间百分比(Steal Time),这个值只在虚拟机中才有意义,表示宿主机将 CPU 资源分配给了其他虚拟机。

实际使用示例

示例 1:每 2 秒刷新一次,共刷新 5 次

$ vmstat 2 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  41812  80108 394836    0    0    10     8   10   18  1  1 97  0  0
 0  0      0  41788  80108 394848    0    0     0     0  103  125  0  0 100  0  0
 0  0      0  41788  80108 394848    0    0     0     0  103  126  0  0 100  0  0
 0  0      0  41788  80108 394848    0    0     0     0  103  125  0  0 100  0  0
 0  0      0  41788  80108 394848    0    0     0     0  103  126  0  0 100  0  0
 0  0      0  41788  80108 394848    0    0     0     0  103  125  0  0 100  0  0

这个命令会显示 5 行数据,每 2 秒更新一次,让你看到系统资源的实时变化。

示例 2:显示活跃和非活跃内存

$ vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   inact   active   si   so    bi    bo   in   cs us sy id wa st
 1  0      0  41812  108040  323360    0    0    10     8   10   18  1  1 97  0  0
  • inact: 非活跃内存,近期很少被使用。
  • active: 活跃内存,近期被频繁使用。
  • inact + activebuff + cache + free (在 vmstat -a 中,free 通常是真正的空闲内存),这个视图能更准确地反映哪些内存正在被使用。

示例 3:显示内存统计摘要

$ vmstat -s
      1239868 K total memory
      418120 K free memory
      80108 K used memory
      394836 K active memory
      108040 K inactive memory
      1239868 K kernel memory
          0 K swap cache
      1239868 K total swap
      1239868 K free swap
          0 K used swap
...

这个输出以列表形式展示了更详细的内存统计信息,非常适合用于脚本或深入分析。


如何解读 vmstat 的结果(性能分析)

  • CPU 瓶颈:

    • 查看 cpu 列。us + sy 接近 100%,而 id 持续很低,说明 CPU 正在满负荷工作。
    • us 很高,说明是用户程序(如 Web 服务器、数据库)消耗了 CPU。
    • sy 很高,说明是内核操作(如网络、I/O 处理)消耗了 CPU。
  • 内存瓶颈:

    • 查看 memory 列的 free 值。free 持续很低(低于总内存的 10%),而 swap 列的 swpd 为 0,说明系统内存紧张,但还没用到交换空间,此时应考虑增加内存或优化应用程序。
    • swpdsiso 都不为零且持续很高,这是非常严重的内存瓶颈信号,系统正在频繁地将内存页换入换出,会导致系统性能急剧下降(称为“颠簸”或 "Thrashing"),必须立即优化或增加内存。
  • I/O 瓶颈:

    • 查看 io 列的 bibo,如果这两个值持续很高,说明磁盘 I/O 非常繁忙。
    • 查看 cpu 列的 wawa 值很高,说明 CPU 在等待 I/O 完成,这进一步证实了 I/O 瓶颈,可能需要检查磁盘性能、文件系统或使用更快的磁盘(如 SSD)。
  • 进程/系统瓶颈:

    • procs 列的 r 值持续大于 CPU 核心数,说明进程数过多,CPU 调度压力大。
    • system 列的 cs 值非常高,说明进程间切换频繁,可能是因为太多小任务在竞争 CPU 资源。

vmstat 是系统管理员和开发者进行性能故障排查的第一线工具,它提供了一个快速、高层次的系统资源概览,虽然它不如 tophtop 那样能提供每个进程的详细信息,但它的简洁和聚焦使其非常适合用于:

  1. 快速检查系统整体健康状况
  2. 监控 CPU、内存、I/O 的实时趋势
  3. 初步定位性能瓶颈的方向(是 CPU、内存还是 I/O 问题?)。

掌握 vmstat 是成为一名高效 Linux 用户的关键一步。

分享:
扫描分享到社交APP
上一篇
下一篇