Linux下如何使用 vmstat 命令

弓背霞明剑照霜,秋风走马出咸阳。这篇文章主要讲述Linux下如何使用 vmstat 命令相关的知识,希望能为你提供帮助。
vmstat 是 virtual memory statistics 的缩写,它是Linux下一个非常有用的监控工具,除了内存之外,还提供 块 IO、CPU 时间 等额外的信息!
一、语法
vmstat 命令的执行不需要特殊的权限,普通用户就可以执行,其语法形式如下

vmstat [options] [delay [count]]

delay 表示数据更新间隔,单位是秒,如果没有指定此值,表示系统启动以来的平均时间,而且此时只输出一次结果!
count 表示输出次数,如果没有指定该值,但是指定了 delay 的值,则表示无限次!
二、结果字段说明
在命令行输入 vmstat 并回车, 会输出一次结果
$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- rbswpdfreebuffcachesisobiboincs us sy id wa st 300 991324932 53733600003400 10000

结果中有许多的字段,下表列出了每个字段的详细说明:
字段 说明
r 可运行进程的数量,包括运行态和就绪态
b 处于不可中断睡眠状态的进程数量
swpd 虚拟内存使用量
free 空闲内存
buff 用作buffer的内存数量
cache 用作cache的内存数量
si 从磁盘换入内存的数量
so 从内存换出到磁盘的数量
bi 从块设备接收的块,单位:块/秒
bo 发送到块设备的块,单位:块/秒
in 每秒中断数,包括时钟中断
cs 每秒上下文切换数
us 用户态执行时间
sy 内核态执行时间
id CPU空闲时间
wa 等待IO的时间
st 从虚拟机中偷取的时间
表中第二行 处于不可中断睡眠状态的进程数量,这里的不可中断是指 一个进程在执行某些系统调用时进入的状态,在这种状态下,进程被阻塞,并且不能被中断,直到完成系统调用!
字段结果按照颜色分成了几部分,从上到下依次是:进程信息,内存信息,IO信息,系统中断和上下文,CPU时间!
内存信息中数值的单位默认是 KB ( 1024 kbytes ), CPU时间字段并不表示具体的时间,而是占总CPU时间的一个百分比!
三、常见选项
选项 说明
-a 显示活跃和非活跃内存
-f 从系统启动至今 fork 的数量,包括 fork、vfork 以及 clone 等系统调用
-s 显示系统事件计数以及内存统计信息
-d 报告磁盘统计信息
-D 统计活动磁盘信息
-p 指定分区的详细信息
-t 追加一列时间显示
-S 按照指定字节单位显示
-w 结果按照宽模式显示
-V vmstat的版本
常见用法
vmstat 命令主要用于识别系统的瓶颈,统计数据的时候,它不会包含自身进程!
  • 按照指定时间间隔和次数输出
$ vmstat 2 10 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- rbswpdfreebuffcachesisobiboincs us sy id wa st 2012552 148356 234324 3382956001214422 9700 1012552 148264 234324 33829800000 14974 2747832 9600 1012552 148232 234324 338298400014 14384 2718132 9600 0012552 148376 234332 3383052000204 14197 2681242 9400 0012552 148512 234332 33830880004 14398 2715532 9500 0012552 147892 234332 3383128000210 15515 2880232 9500 1012552 148388 234332 33831560000 15147 2804232 9500 0012552 148264 234332 33831680004 14380 2739531 9600 0012552 148264 234336 3383216000198 14430 2700831 9500 2012552 148140 234336 33832520006 14233 2716132 9500

2 表示每隔 2 秒输出一次结果,10 表示总共输出 10 次,10 次之后程序自动结束!
  • 修改内存显示单位
输出的结果中,内存数据的单位默认是 KB,可以通过 -S 选项调整显示的单位,有下面几种单位可供选择!
注意:-S 选项对 si、 so 字段无效
k# 1000 bytes K# 1024 bytes m# 1000 * 1000 bytes M# 1024 * 1024 bytes

Linux下如何使用 vmstat 命令

文章图片

上图中第一个结果中内存数据显示单位是 KB , 第二个结果中单位是 MB,将第一个结果对应字段的数值除以 1024 就得到了第二个结果
  • 活跃内存和非活跃内存
Linux下如何使用 vmstat 命令

文章图片

inact 是非活跃内存,active 是活跃内存
活跃内存是进程在使用的内存,非活跃内存是未运行进程的内存!
  • 系统启动以来 fork 的数量
这里的 fork 数量包括 fork、vfork 以及 clone 等系统调用!
$ vmstat -f 11952 forks $ vmstat -f 11968 forks $ vmstat -f 11983 forks

我们每次在控制台执行一次命令,系统就会 fork 一个新的进程来执行命令,比如像上面的例子,每执行一次 vmstat -f 命令,系统就会 fork 一个新进程!
这个选项还可以用于统计某个操作消耗多少次 fork 调用,只需要在操作前后各执行一次 vmstat -f 命令,比较两次结果的差值即可!
  • 每行追加一列时间
追加一列时间显示,有助于比较一段时间内的结果!
Linux下如何使用 vmstat 命令

文章图片

  • 按照宽模式显示
vmstat 结果中的某些字段的数字有时会比较长,而且跟字段名的位置有偏差, 不太适合人类的观看习惯,-w 选项可以按照宽模式显示数据,使结果看起来更直观,下图是分别未使用宽模式和使用了宽模式的一个对比!
Linux下如何使用 vmstat 命令

文章图片

  • 统计磁盘信息
Linux下如何使用 vmstat 命令

文章图片

磁盘信息主要分三个方面:读、写、IO ,读和写以毫秒为单位,IO以秒为单位!
读 total:成功读取的总数 merged:分组读取(产生一个 IO) sectors:成功读取的扇区数 ms:读取花费的毫秒写 total:成功写入的总数 merged:分组写入(产生一个 IO) sectors:成功写入的扇区数 ms:写花费的毫秒IO cur:正在进行的IO s:IO花费的秒数

  • 指定磁盘分区信息
Linux下如何使用 vmstat 命令

文章图片

【Linux下如何使用 vmstat 命令】上图中,输出结果显示 sda1 分区设备的信息,它们包括:读计数、读取的扇区数,写计数,分区写请求总数!

    推荐阅读