Linux命令详解-vmstat

显示全文:

监控CPU调度程序运行队列:

vmstat是Virtual Memory Statics(虚拟内存统计)的缩写,是实时系统监控工具。该命令通过使用knlist子程序和/dev/kmen伪设备驱动器访问这些数据,输出信息直接打印在屏幕。

vmstat命令输出包括以下内容:

(1),多少任务在运行
(2),CPU的使用情况
(3),CPU收到多少中断
(4),发生多少上下文切换

命令输出:

[root@www ~]# vmstat
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 1715728  19348  72648    0    0    28     3   34   29  0  0 97  2  0    

 vmstat   1  :每隔1s中刷新一次。

各输出字段含义解释:

procs
r:运行队列长度 (就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b:阻塞队列长度
memory
swpd:交换内存已经使用的大小,
free:空闲内存
buffer:缓冲(之前的那一篇文章讲述了buffer和cache之间的区别)。
cache:缓存
swap:动态swap信息
si:swapin 物理内存到交换内存的转换
so:swapout 交换内存到物理内存的转换
io:
bi:blockin 物理磁盘块到交换内存块
bo:blockout 交换内存块到物理内存块
system
in:终止,每秒的中断数,包括时钟中断。
cs:context switch:上下文切换
cpu
us:用户空间占用百分比(用户进程执行时间)
sy:系统进程执行时间
id:空闲时间(包括IO等待时间)
wa:等待IO时间

vmstat可以添加的参数:

[root@www ~]# vmstat -help
usage: vmstat [-V] [-n] [delay [count]]
              -V prints version.   显示vmstat的版本信息
              -n causes the headers not to be reprinted regularly. 只在开始事显示一次各字段名称。
              -a print inactive/active page stats. 显示活跃和非活跃的内存
              -d prints disk statistics 显示磁盘统计信息
              -D prints disk table 以表格形式显示disk信息。
              -p prints disk partition statistics  显示指定磁盘分区统计信息
              -s prints vm table 显示内存相关统计信息及多种系统活动数量。
              -m prints slabinfo 显示slabinfo
              -t add timestamp to output 给输出添加时间戳
              -S unit size  使用指定单位显示。参数有 kKmM ,分别代表1000102410000001048576字节(byte)。默认单位为K1024 bytes)
              delay is the delay between updates in seconds. 刷新时间间隔。如果不指定,只显示一条结果。
              unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)
              count is the number of updates. 刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。

vmstat  1  5  :每1秒刷新一次,只显示5次。

补充知识:
解释下进程上下文的含义(也不一定太准确):
当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够得到切换时的状态执行下去。在LINUX中,当前进程上下文均保存在进程的任务数据结构中。在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。但同时会保留所有需要用到的资源,以便中继服务结束时能恢复被中断进程的执行。