vmstat 命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,MEM内存使用,虚拟内存交换情况,IO读写情况。
工作原理
在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。
分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。
当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。尽管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。
使用说明
用法: vmstat [-a] [-n] [-t] [-S unit] [delay [ count]] vmstat [-s] [-n] [-S unit] vmstat [-m] [-n] [delay [ count]] vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat [-f] vmstat [-V] -a:显示活跃和非活跃内存 -f:显示从系统启动至今的fork数量 -m:显示slabinfo -n:只在开始时显示一次各字段名称。 -s:显示内存相关统计信息及多种系统活动数量。 delay:刷新时间间隔。如果不指定,只显示一条结果。 count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。 -d:显示磁盘相关统计信息。 -p:显示指定磁盘分区统计信息 -S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes) -V:显示vmstat版本信息。
命令示例
vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数(单位是秒);第二个参数是采样的次数,如:
2表示每个两秒采集一次服务器状态,1表示采集两次 shell> vmstat 2 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 1466400 17856 81040 0 0 2 0 6 5 0 0 100 0 0 vmstat每2秒采集数据,一直采集直到结束vmstat程序为止 shell> vmstat 2 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 1466284 17856 81040 0 0 2 0 6 5 0 0 100 0 0 0 0 0 1466276 17856 81040 0 0 0 0 43 66 0 0 100 0 0 0 0 0 1466276 17856 81040 0 0 0 0 42 65 0 0 100 0 0 ...
输出结果含义:
-
r 表示等待执行的进程数,当该值超过CPU数目,就表明出现CPU瓶颈。
-
b 表示阻塞的进程数,比如正在等待I/O、或者内存交换等。
-
swpd 表示已使用的虚拟内存大小。
-
free 空闲的物理内存,当前的空闲页面列表中内存数量
-
buff 缓存内存大小,一般对块设备的读写才需要缓存
-
cache 缓冲内存大小,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
-
si 从磁盘读入swap的大小(Kb/s)。
-
so 从swap写入磁盘的大小(Kb/s)。
-
bi 块设备每秒接收的块数量(块/s),这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte。
-
bo 块设备每秒发送的块数量(块/s)。
-
in 每秒CPU的中断次数,包括时间中断,表示在某一时间间隔中观测到的每秒设备中断数
-
cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了要考虑调低线程或者进程的数目。
-
us 显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
-
sy 显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
-
id 空闲CPU百分比
-
wa 等待IO CPU百分比,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
参考:
http://blog.chinaunix.net/uid-22741583-id-3087675.html
http://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html
整理自网络
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29733787/viewspace-1551880/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29733787/viewspace-1551880/