vmstat命令

vmstat(Virtual Memory Statistics)是Linux系统中用于监控虚拟内存、CPU、磁盘I/O、进程状态等系统整体资源的综合性工具,可实时输出系统核心资源的统计信息,弥补单一工具的监控局限——既能查看内存换页、CPU负载,也能监控磁盘I/O活动,是快速定位系统整体性能瓶颈的核心工具之一。vmstat支持瞬时快照和实时刷新两种模式,默认输出系统启动以来的平均统计数据。

一、vmstat命令基础使用

1.1 基本语法

# 基础用法:输出系统启动以来的平均资源统计信息
vmstat

# 完整语法
vmstat [选项参数] [刷新间隔秒数] [刷新次数]

说明:刷新间隔和次数配合使用实现实时监控(如vmstat 2 3表示每2秒刷新一次,共刷新3次);不指定间隔和次数则输出一次瞬时快照;部分选项需结合间隔使用,否则仅输出一次平均数据。

1.2 核心选项参数

vmstat选项简洁,核心用于扩展监控维度、优化输出格式,常用选项如下:

# 核心功能选项
-f:显示系统启动以来创建的总进程数(fork次数),反映系统进程创建频率
-s:以汇总模式显示内存相关统计信息(如页交换、中断、上下文切换等详细计数)
-d:显示磁盘I/O的详细统计信息,补充默认输出的磁盘活动指标
-p <磁盘分区>:显示指定磁盘分区的I/O统计(如-p vda1,聚焦单个分区性能)
-S <单位>:指定内存统计单位,可选单位有k(KiB)、K(KB,1000进制)、m(MiB)、M(MB),默认KiB
-w:加宽输出格式,避免字段显示不全(适合大内存、高负载系统)

# 其他实用选项
-V:显示vmstat版本信息
-n:仅在首次输出时显示字段标题,后续刷新不重复显示(减少冗余,适合实时监控)

二、vmstat命令输出界面解读

执行vmstat 2 3(每2秒刷新一次,共3次),输出分为进程状态内存状态页交换块设备I/O系统状态CPU状态六大区域,首屏为平均数据,后续为实时数据,以下逐区域详细说明:

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 8205632  98760 1625480    0    0     5     2   35   89  1  1 98  0  0
 0  0      0 8205472  98760 1625480    0    0     0     0  123  256  0  0 100  0  0
 0  0      0 8205472  98760 1625480    0    0     0     0  118  249  0  0 100  0  0

2.1 进程状态(procs)

反映系统中进程的整体状态,核心关注就绪和阻塞进程数,直接关联CPU和I/O负载:

  • r:等待CPU调度的就绪进程数(核心指标),数值持续大于CPU核心数,说明CPU资源紧张,进程排队等待调度;
  • b:处于不可中断睡眠状态的进程数(等待I/O完成,如磁盘、网络I/O),数值持续大于0,说明存在I/O瓶颈,进程阻塞等待资源。

2.2 内存状态(memory)

显示物理内存和缓冲区、缓存的使用情况,与free命令统计逻辑一致,单位默认KiB:

  • swpd:已使用的交换分区(Swap)大小,数值持续增长说明物理内存不足,系统频繁换页;
  • free:完全空闲的物理内存大小;
  • buff:用于存储块设备I/O缓冲区的数据大小(与free命令的Buffers一致);
  • cache:用于存储文件系统缓存的数据大小(与free命令的Cache一致),可被系统回收复用。

2.3 页交换(swap)

反映内存与Swap分区之间的换页活动,换页频繁会严重影响系统性能:

  • si:每秒从Swap分区读入物理内存的数据量(Swap In),单位KiB,数值大于0说明系统正在将Swap数据换入内存;
  • so:每秒从物理内存写入Swap分区的数据量(Swap Out),单位KiB,数值持续大于0说明物理内存不足,系统被迫换出内存数据,需警惕内存泄漏或扩容。

注意:si和so的数值应尽量接近0,持续大于0表示内存压力过大,Swap频繁读写会导致系统响应变慢。

2.4 块设备I/O(io)

监控块设备(磁盘、U盘等)的I/O活动,与iostat命令的基础I/O指标互补:

  • bi:每秒从块设备读入内存的数据量(Blocks In),单位为块(1块=512字节),对应磁盘读操作;
  • bo:每秒从内存写入块设备的数据量(Blocks Out),单位为块,对应磁盘写操作。

解读:bi和bo的数值需结合业务场景判断,如数据库服务器写操作频繁,bo数值会偏高;若数值异常高且伴随CPU wa升高,说明磁盘I/O压力大。

2.5 系统状态(system)

反映系统内核的核心活动频率,关联CPU上下文切换和中断处理效率:

  • in:每秒发生的中断次数(Interrupts),包括硬件中断(如磁盘、网卡)和软件中断,数值过高可能导致CPU负载升高;
  • cs:每秒发生的CPU上下文切换次数(Context Switches),进程切换、线程切换都会触发上下文切换,数值过高会消耗大量CPU资源,导致系统效率下降。

解读:cs数值与CPU核心数、进程数相关,一般情况下,cs数值不应超过CPU核心数的10倍,若持续偏高且us+sy接近100%,说明上下文切换过于频繁。

2.6 CPU状态(cpu)

与top、iostat命令的CPU统计逻辑一致,百分比总和为100%,核心反映CPU资源分配情况:

  • us:用户空间CPU占用率(应用程序如nginx、mysql占用);
  • sy:内核空间CPU占用率(进程调度、内存管理、I/O处理等内核操作占用);
  • id:CPU空闲率,数值越低CPU压力越大;
  • wa:CPU等待磁盘I/O完成的时间占比,持续高于5%说明存在磁盘I/O瓶颈;
  • st:虚拟机被宿主机抢占的CPU占比(仅虚拟化环境有效)。

三、vmstat命令常用场景示例

3.1 日常快速监控系统整体状态(推荐)

vmstat 2 5 -w  # 每2秒刷新一次,共5次,加宽格式避免字段截断
# 重点观察r、b、si、so、wa字段,快速判断CPU、内存、I/O是否存在瓶颈

3.2 查看内存相关详细汇总数据

vmstat -s  # 输出内存、页交换、中断、上下文切换等汇总计数
# 适合深入分析内存换页频率、中断总量等累计指标,辅助排查历史性能问题

3.3 监控指定磁盘分区的I/O性能

vmstat -p vda1  # 显示vda1分区的I/O统计,包括读写字节数、请求数等
# 聚焦特定分区,针对性排查数据分区的I/O瓶颈

3.4 查看磁盘I/O整体详细统计

vmstat -d  # 输出所有块设备的I/O详细信息,包括读请求、写请求、响应时间等
# 补充默认输出的I/O指标,与iostat配合使用,全面分析磁盘性能

3.5 实时监控并简化输出(隐藏重复标题)

vmstat 1 10 -n  # 每1秒刷新一次,共10次,仅首次显示标题
# 适合长时间监控,减少输出冗余,便于观察数据变化趋势

3.6 以指定单位显示内存数据(直观易懂)

vmstat -S m 2 3  # 以MiB为单位显示内存数据,每2秒刷新一次,共3次
# 适合大内存服务器,避免KiB单位数值过大导致阅读不便

四、关键误区与注意事项

  1. 误区:仅依赖首屏平均数据判断性能 vmstat首屏输出的是系统启动以来的平均统计数据,参考价值有限,实时监控时需忽略首屏,重点关注后续刷新的即时数据,避免被长期平均数据掩盖瞬时瓶颈。
  2. 上下文切换与CPU负载的关联 cs(上下文切换)数值高不一定代表性能差,需结合us、sy、r字段综合判断:若cs高但CPU空闲率(id)高,说明切换无明显影响;若cs高且us+sy接近100%,则说明切换消耗大量CPU资源,需排查进程/线程过多问题。
  3. 内存换页与Swap使用的区分 si、so数值为0不代表Swap未被使用,仅说明当前无换页活动;需结合swpd字段判断Swap整体使用情况,若swpd高但si、so为0,说明Swap已被占用但无新的换页操作,仍需关注内存压力。
  4. 块设备I/O单位的换算 vmstat的bi、bo单位为块(1块=512字节),换算为MiB需除以2048(1MiB=1024KiB=2048块),避免因单位误解导致对I/O速率的误判。
  5. 与其他工具的配合使用 vmstat仅提供系统整体资源统计,无法定位具体进程/分区:需结合top(定位CPU密集型进程)、iostat(磁盘I/O细节)、iotop(进程级I/O)、free(内存详情)等命令,形成完整的性能排查链路。
  6. 虚拟化环境的指标解读 虚拟化环境中,st(被抢占CPU占比)字段需重点关注,若st持续高于5%,说明宿主机资源紧张,虚拟机CPU被频繁抢占,需协调宿主机资源分配。

五、补充说明

vmstat是一款轻量级综合性监控工具,占用系统资源极低(可忽略不计),适合在系统高负载时使用,不会加重性能负担。其核心优势是能快速呈现系统整体资源状态,帮助运维人员快速定位瓶颈方向(CPU/内存/I/O),再结合专项工具深入排查。此外,vmstat的输出格式规范,便于脚本解析提取关键指标,可配合crontab定时执行,实现性能数据的自动化采集与分析。

posted @ 2026-01-26 17:14  向闲而过  阅读(5)  评论(0)    收藏  举报