procps(2)vmstat命令

vmstat 是一个在类 Unix 系统中常用的命令行工具,用于报告虚拟内存统计信息。它可以显示系统的内存使用情况、CPU 活动、磁盘 I/O 以及进程相关的信息。


1. 命令简介

vmstat 的全称是 “virtual memory statistics”(虚拟内存统计)。它是一个轻量级的工具,适合实时监控系统性能,尤其在分析内存瓶颈、CPU 使用率或 I/O 负载时非常有用。输出的信息通常以表格形式展示,包含多个字段,反映系统的运行状态。

2. 基本语法

1
vmstat [选项] [延迟时间] [次数]
  • 延迟时间:以秒为单位,表示刷新数据的间隔时间。
  • 次数:指定输出数据的次数。如果不指定,则默认只输出一次。
  • 选项:控制输出格式或内容的参数。
root@vgt-ubuntu-10:~# vmstat -h

Usage:
 vmstat [options] [delay [count]]

Options:
 -a, --active           active/inactive memory
 -f, --forks            number of forks since boot
 -m, --slabs            slabinfo
 -n, --one-header       do not redisplay header
 -s, --stats            event counter statistics
 -d, --disk             disk statistics
 -D, --disk-sum         summarize disk statistics
 -p, --partition <dev>  partition specific statistics
 -S, --unit <char>      define display unit
 -w, --wide             wide output
 -t, --timestamp        show timestamp

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see vmstat(8).

3. 常用选项

  • -s:显示内存统计的详细信息(以表格形式)。
  • -n:只显示一次表头(默认每次刷新都会显示表头)。
  • -a:显示活跃和非活跃内存(active/inactive memory)。
  • -d:显示磁盘统计信息。
  • -w:以更宽的格式输出,便于阅读。
  • -t:在输出中添加时间戳。

4. 使用示例

1:基本使用

1
vmstat

输出示例(Linux 系统):

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 123456  78901 234567    0    0    10    20  100  200  5  2 92  1  0
  • 字段解释(部分关键字段):
    • procs:进程相关。
      • r:等待运行的进程数。
      • b:处于不可中断睡眠状态的进程数。
    • memory:内存信息(单位通常为 KB)。
      • swpd:使用的交换分区大小。
      • free:空闲内存。
      • buff:用作缓冲的内存(写缓存)。
      • cache:用作缓存的内存(读缓存)。
    • swap:交换分区使用情况。
      • si:从交换分区换入内存的数据量。
      • so:从内存换出到交换分区的数据量。
    • io:I/O 统计。
      • bi:从块设备读取的数据量。
      • bo:写入块设备的数据量。
    • system:系统活动。
      • in:每秒中断数。
      • cs:每秒上下文切换数。
    • cpu:CPU 使用百分比。
      • us:用户时间。
      • sy:系统时间。
      • id:空闲时间。
      • wa:等待 I/O 的时间。

2:实时监控

1
vmstat 2 5
  • 每 2 秒刷新一次,共刷新 5 次。

3:显示详细内存统计

1
vmstat -s

输出示例:

   16384000  total memory
   12345678  used memory
    2345678  active memory
    3456789  inactive memory
    4038322  free memory
     789012  buffer memory
    2345678  swap cache
   16777216  total swap
          0  used swap
   16777216  free swap
  • 显示内存和交换分区的总数、使用量、空闲量等。

4:带时间戳的监控

1
vmstat -t 1
  • 每秒刷新一次,并在每行末尾添加时间戳。

5. 实际应用场景

  • 内存使用分析:检查 freebuffcache,判断内存是否充足。
  • CPU 负载:通过 ussyid 判断 CPU 是否繁忙。
  • I/O 瓶颈:观察 bibowa,分析磁盘 I/O 是否是性能瓶颈。
  • 交换分区使用:如果 siso 频繁活动,可能表明物理内存不足。

6. 注意事项

  • 第一次运行时,数据是系统启动以来的平均值;后续实时刷新才反映当前状态。因此,建议结合延迟时间使用(如 vmstat 1)。
  • 需要 root 权限才能获取某些详细统计信息(如某些磁盘数据)