vmstat能提供进程、内存、分页、块I/O、traps和CPU活动相关信息。vmstat命令可以显示平均值或实际取样值。使用取样频率和取样时间等参数启用vmstat取样模式。
注意:在取样模式中需要考虑实际数据搜集中存在误差的可能,设定较低的取样频率能减少这样的可能。
实例2-2 vmstat输出示例
注释:vmstat输出结果中第一行展示的是自最后一次启动以来的平均值,所以此行可以忽略。
输出栏位如下:
Process(procs)

r :等待运行时间的进程数。
b :处于不可中断睡眠状态的进程数。

Memory

swpd :虚拟内存使用量(KB)。
free :空闲内存量(KB)。
buff :用作buffer的内存量(KB)。
cache :用作cache的内存量(KB)。

swap

si :从硬盘交换到内存的数量(KBps)。
so :交换到硬盘的内存数量(KBps)。

IO

bi:发送到块设备的块的数量(blocks/s)。
bo:从块设备获取的块的数量(blocks/s)。

System

in :每秒钟的中断数量,包括时钟中断。
cs :每秒钟上下文交换的数量。

CPU(整个CPU时间的百分比)

us :花费在非内核代码的CPU时间(用户时间,包括Nice时间)。
sy :花费在内核代码的CPU时间(系统时间)。
id :空闲时间。在2.5.41内核以前,还包括I/O等待时间。
wa :IO等待时间。在2.5.41内核以前,显示为0。

vmstat命令提供了许多命令行参数,使用man手册查看参数的详细文档。常用的参数有:

-m :显示内核的内存使用情况(slabs)

-a :显示活动和非活动内存分页相关信息

-n :只显示一次栏位名称行,当在取样模式通下将输出信息存储到文件时非常有用。(例如,root#vmstat –n 2 10 以每2秒钟的频率执行10次取样)

当使用-p{分区}参数时,vmstat也可以提供I/O相关统计信息。
补充:
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写, 是实时系统监视工具。该命令通过使用knlist子程式和/dev/kmen伪设备驱动器访问这些数据,输出信息直接打印在屏幕。vmstat反馈的和CPU相关的信息包括:
(1)多少任务在运行
(2)CPU使用的情况
(3)CPU收到多少中断
(4)发生多少上下文转换
下面只介绍 Vmstat和CPU相关的参数
vmstat的语法如下:
  vmstat [delay [count]]
参数的含义如下:
参数 解释
delay 相邻的两次采样的间隔时间
count 采样的次数,count只能和delay一起使用
当没有参数时,vmstat则显示系统启动以后所有信息的平均值。有delay时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个delay时间段的平均信息。当系统有多个CPU时,输出为所有CPU的平均值。
和CPU有关的输出的含义 (采用进一法)
参数 解释 从/proc/stat获得数据
任务的信息
r 在internal时间段里,运行队列里等待CPU的任务(任务)的个数,即不包含vmstat进程 procs_running-1
b 在internal时间段里,被资源阻塞的任务数(I/0,页面调度,等等.) ,通常情况下是接近0的 procs_blocked
CPU信息 所有值取整(四舍五入)
us 在internal时间段里,用户态的CPU时间(%),包含 nice值为负进程 (user+nice)/total*100
sy 在internal时间段里,核心态的CPU时间(%) (system+irq+softirq)/total*100
id 在internal时间段里,cpu空闲的时间,不包括等待i/o的时间(%) idle/total*100
wa 在internal时间段里,等待i/o的时间(%) iowait/total*100
系统信息
in 在internal时间段里,每秒发生中断的次数 intr/interval
cs 在internal时间段里,每秒上下文转换的次数,即每秒内核任务交换的次数 ctxt/interval
CODE:
 
total_cur=user+system+nice+idle+iowait+irq+softirq
            total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
            total=total_cur-total_pre
范例1:average mode (粗略信息)
当vmstat不带参数时,对应的输出值是从系统启动以来的平均值,而r和b则对应的是完成这一命令时,系统的值。从下面例子,能看出系统基本出去闲置状态(idle)。自启动以来,CPU在用户态消耗时间为5%,在核心态消耗为本1%,剩下的为闲置时间。需要指出的是:这里的用户态时间包括nice值为负的进程的时间。
CODE:
 
[root@localhost ~]# vmstat
            procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
            r b swpd free buff cache si so bi bo in cs us sy id wa
            1 0 0 4580 428 98516 0 0 49 6 15 19 2 1 96 1
            [root@localhost ~]#
范例2:average mode (周详信息)
命令格式:
vmstat –s
这里只讨论和CPU相关信息。“CPU ticks”表示自系统启动CPU运行时间,这里以tick为时间单位。用tick来西安市us,sy id 和wa的时间;forks指自从系统启动以来,所创建的新任务的个数。这些信息从/proc/stat 的第一行和”processes”行获得。
CODE:
 
[root@localhost ~]# vmstat -s
            255280 total memory
            244216 used memory
            206624 active memory
            21208 inactive memory
            11064 free memory
            628 buffer memory
            91396 swap cache
            255992 total swap
            24 used swap
            255968 free swap
            973400 non-nice user cpu ticks
            477 nice user cpu ticks
            206168 system cpu ticks
            43567714 idle cpu ticks
            373234 IO-wait cpu ticks
            62732 IRQ cpu ticks
            1972 softirq cpu ticks
            22366502 pages paged in
            88756936 pages paged out
            0 pages swapped in
            0 pages swapped out
            135634319 interrupts
            137288441 CPU context switches
            1134440368 boot time
            208990 forks
            [root@localhost ~]#
结果解释
参数 描述 /proc/stat
non-nice user cpu ticks 自系统启动以来,CPU在用户态下运行非nice进程的时间,单位为jiffies user
nice user cpu ticks 自系统启动以来,CPU在用户态下运行nice进程的时间,单位为jiffies nice
system cpu ticks 自系统启动以来,CPU处于系统状态的时间,单位为jiffies sys
idle cpu ticks 自系统启动以来,CPU处于闲置状态的时间,单位为jiffies idle
IO-wait cpu ticks 自系统启动以来,CPU处理IO中断的时间,单位为jiffies iowait
IRQ cpu ticks 自系统启动以来,CPU处理硬中断的时间,单位为jiffies irq
softing cpu ticks 自系统启动以来,CPU处理软中断的时间,单位为jiffies Softirq
interrupts 自系统启动以来,发生的所有的中断的次数目 Intr
CPU context switches 自系统启动以来,发生的上下文交换的次数 Ctxt
boot time 自系统启动以来到目前运行的时间,单位为秒。 btime
forks 自系统启动以来所创建的任务的个数目。 Process
范例3:定期采样(delay [count])
定期采样数据是指每隔delay时间,采样一次。当count 为0时,vmstat 将不停地定期报告信息;否则当报告count次后,vmstat 命令停止运行。
第一行的信息如同范例1,是自系统启动以来的平均信息。从第二行开始,每行的意思是:r和b采样那一时刻系统运行队列和等待队列的情况;而usystem参数(in,cs)及CPU参数(us,sy,id,wa)对应的输出值是系统在前一个delay的情况。
从下面例子能看出上下文交换的次数小于中断的发生次数。当系统大部分时间是空闲并且中断大部分是时间中断时,这种现象极可能发生。当时间中断发生时, 因为调度器没有什么任务可调度,所以非常少发生上下文转换。
CODE:
 
[root@localhost ~]# vmstat 2 4
            procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
            r b swpd free buff cache si so bi bo in cs us sy id wa
            1 0 24 11032 652 91396 0 0 49 6 15 19 2 1 96 1
            0 0 24 11032 652 91396 0 0 0 0 377 464 1 0 99 0
            0 0 24 11024 652 91396 0 0 0 0 387 476 1 0 100 0
            0 0 24 11024 652 91396 0 0 0 0 323 377 0 0 100 0
            [root@localhost ~]#