技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> Linux系统监控工具之vmstat详解

Linux系统监控工具之vmstat详解

浏览:1479次  出处信息

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

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

一、前言

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

虚拟内存运行原理

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

二、vmstat的使用

2.1.用法

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

    2. usage: vmstat [-V][-n][delay [count]]

    3. -V prints version.显示vmstat版本信息.

    4. -n causes the headers not to be reprinted regularly.

    5. -a print inactive/active page stats.显示活跃和非活跃内存.

    6. -d prints disk statistics.显示磁盘相关统计信息.

    7. -D prints disk table.显示指定磁盘分区.

    8. -p prints disk partition statistics.显示指定磁盘分区统计信息.

    9. -s prints vm table.显示内存相关统计信息.

    10. -m prints slabinfo.显示slabinfo.

    11. -t add timestamp to output.显示时间信息.

    12. -S unit size.指定显示信息的单位。

    13.              delay is the delay between updates in seconds.更新时间.

    14.              unit size k:1000 K:1024 m:1000000 M:1048576(defaultis K)

    15.              count is the number of updates.次数.

2.2 使用说明

    1. [root@BJYF-7~]#vmstat 1

    2. procs -----------memory-------------swap-------io------system-------cpu-----

    3. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

    4. 1010580641537678424718647109115137309700

    5. [root@BJYF-7~]#vmstat -S M

    6. procs -----------memory-------------swap-------io------system-------cpu-----

    7. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

    8. 00107183771060010115136309700

字段说明:
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的输出

    1. [root@BJYF-7~]#vmstat 14

    2. procs -----------memory-------------swap-------io------system-------cpu-----

    3. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

    4. 00105807395128781367077271010114837209700

    5. 001058073951207813670772000053550010000

    6. 001058073951207813670772000047590010000

    7. 001058073951207813670772000036550010000

    8. [root@BJYF-7~]#free

    9.             total       used       free     shared    buffers     cached

    10. Mem:8059684664556739512807813670772

    11. -/+ buffers/cache:5156487544036

    12. Swap:6143992105806133412

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

3.2 高CPU使用情况的vmstat输出

    1. [root@BJYF-7~]#vmstat 14

    2. procs -----------memory-------------swap-------io------system-------cpu-----

    3. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

    4. 2010580543632878344718647109114937309700

    5. 20105805436344783447186400002027571000000

    6. 20105805436360783447186400082027651000000

    7. 20105805436360783447186400002024551000000

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

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

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

    2. procs -----------memory-------------swap-------io------system-------cpu-----

    3. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

    4. 1841619441098762524600174392760017652276041628929161329430

    5. 0941588801046842524552582405526858240552684595257810140770

    6. 874110180923442524732986045554098604555404890518917180651

    7. 184161664105228252464859272110972592721109728996255110260650

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

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

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

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

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

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

    2. procs -----------memory-------------swap-------io------system-------cpu-----

    3. r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

    4. 801071212088430410128961851911886542536113800

    5. 801071212088430410128000020056741000000

    6. 801071212088430410128000020096751000000

    7. 801071212088430410128000020056781000000

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

参考文章

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

建议继续学习:

  1. Mysql监控指南    (阅读:19793)
  2. 批量添加主机到cacti+nagios的监控报警系统中    (阅读:13271)
  3. 我常用的主机监控shell脚本    (阅读:11502)
  4. 7 天打造前端性能监控系统    (阅读:10119)
  5. 如何监控HP服务器硬件状态    (阅读:9108)
  6. Cacti 添加 Nginx 监控    (阅读:8916)
  7. Linux下三种常用的流量监控软件对比    (阅读:8685)
  8. Cacti 添加 Memcached 监控    (阅读:8113)
  9. Cacti 添加 Apache 监控    (阅读:7576)
  10. 你应该知道的16个Linux服务器监控命令    (阅读:6835)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
后一篇:监控进程 >>
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1