IT技术博客大学习 共学习 共进步

Linux系统监控工具之vmstat详解

IPCPU--网络之路 2015-02-07 21:03:52 浏览 2,222 次

vmstat是一个查看虚拟内存(Virtual Memory)使用状况的工具,使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。

vmstat是一个十分有用的Linux系统监控工具,是procps组件的一部分。

一、前言

很显然从名字中我们就可以知道vmstat是一个查看虚拟内存(Virtual Memory)使用状况的工具,但是怎样通过vmstat来发现系统中的瓶颈呢?在回答这个问题前,还是让我们回顾一下Linux中关于虚拟内存相关内容。

虚拟内存运行原理

在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释 放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。
调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。
交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。

二、vmstat的使用

2.1.用法

[root@BJYF-7~]#vmstat --help

2.2 使用说明

[root@BJYF-7~]#vmstat 1

字段说明:
Procs(进程)
r: 运行队列中进程数量
b: 等待IO的进程数量
Memory(内存)
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
Swap
si: 每秒从磁盘写到虚拟内存的大小
so: 每秒写入磁盘的虚拟内存大小
IO
bi: 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte。
bo: 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
系统
in: 每秒中断数,包括时钟中断。
cs: 每秒上下文切换数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数 目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者 线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空 间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
CPU
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间)
wa: 等待IO时间

三、案例演示

3.1 空负载状态下vmstat的输出

[root@BJYF-7~]#vmstat 14

注意:我们在这里发现一个小bug,vmstat第一次显示的结果往往会不准确,需要看第二、三次的结果

3.2 高CPU使用情况的vmstat输出

[root@BJYF-7~]#vmstat 14

和上面对照可以明显的发现,运行队列为2,内存空闲区域减少,中断数值较大,CPU中的user%使用率是100%。

3.3 高CPU和内存使用情况的vmstat输出

[root@BJYF-7-38 tmp]#vmstat  14

从输出结果来看,处在block阻塞状态等待IO操作的数量在8左右,swap使用4G,几乎80%,剩余物理内存100M左右,swap换入换出在60M每秒,中断和上下文次数较多,CPU中user%为20%,wait%为70%。

此时通过top来看,CPU占用最多的进程为系统的kswapd0。iostat查看磁盘使用率100%。

由此推断,swap交换过于频繁,导致IO使用率100%,过多的进程处在阻塞状态,工作效率极低。

而之所以产生很多的swap交换,很可能是因为内存不足造成的。需要升级内存。

内存升到8G以后,在此运行相同的测试程序结果如下:

[root@BJYF-7-38 tmp]#vmstat 14

升级以后,swap使用1G左右,但swap换入换出基本为0,wait%为0,user%为100%,一切都正常了。

参考文章

http://blog.csdn.net/xifeijian/article/details/8209788

建议继续学习

  1. Mysql监控指南 (阅读 21,103)
  2. 批量添加主机到cacti+nagios的监控报警系统中 (阅读 14,683)
  3. 我常用的主机监控shell脚本 (阅读 13,104)
  4. 7 天打造前端性能监控系统 (阅读 11,063)
  5. 如何监控HP服务器硬件状态 (阅读 10,506)
  6. Cacti 添加 Nginx 监控 (阅读 10,363)
  7. Linux下三种常用的流量监控软件对比 (阅读 9,986)
  8. Cacti 添加 Memcached 监控 (阅读 9,162)
  9. Cacti 添加 Apache 监控 (阅读 8,984)
  10. 你应该知道的16个Linux服务器监控命令 (阅读 8,408)