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单位数值过大导致阅读不便
四、关键误区与注意事项
- 误区:仅依赖首屏平均数据判断性能 vmstat首屏输出的是系统启动以来的平均统计数据,参考价值有限,实时监控时需忽略首屏,重点关注后续刷新的即时数据,避免被长期平均数据掩盖瞬时瓶颈。
- 上下文切换与CPU负载的关联 cs(上下文切换)数值高不一定代表性能差,需结合us、sy、r字段综合判断:若cs高但CPU空闲率(id)高,说明切换无明显影响;若cs高且us+sy接近100%,则说明切换消耗大量CPU资源,需排查进程/线程过多问题。
- 内存换页与Swap使用的区分 si、so数值为0不代表Swap未被使用,仅说明当前无换页活动;需结合swpd字段判断Swap整体使用情况,若swpd高但si、so为0,说明Swap已被占用但无新的换页操作,仍需关注内存压力。
- 块设备I/O单位的换算 vmstat的bi、bo单位为块(1块=512字节),换算为MiB需除以2048(1MiB=1024KiB=2048块),避免因单位误解导致对I/O速率的误判。
- 与其他工具的配合使用 vmstat仅提供系统整体资源统计,无法定位具体进程/分区:需结合top(定位CPU密集型进程)、iostat(磁盘I/O细节)、iotop(进程级I/O)、free(内存详情)等命令,形成完整的性能排查链路。
- 虚拟化环境的指标解读 虚拟化环境中,st(被抢占CPU占比)字段需重点关注,若st持续高于5%,说明宿主机资源紧张,虚拟机CPU被频繁抢占,需协调宿主机资源分配。
五、补充说明
vmstat是一款轻量级综合性监控工具,占用系统资源极低(可忽略不计),适合在系统高负载时使用,不会加重性能负担。其核心优势是能快速呈现系统整体资源状态,帮助运维人员快速定位瓶颈方向(CPU/内存/I/O),再结合专项工具深入排查。此外,vmstat的输出格式规范,便于脚本解析提取关键指标,可配合crontab定时执行,实现性能数据的自动化采集与分析。

浙公网安备 33010602011771号