浅谈vmstat
vmstat能展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,I/O读写情况。
vmstat 5 2 ;每5秒输出一次,采集2次信息后退出vmstat命令

procs:
r:表示运行队列(即有多少个进程分到了CPU)一般r值超过cpu的个数(CPU总核数),就会出现cpu瓶颈。这个也跟top的负载有关,一般负载超过3就比较高,超过5就很高,超过10就不正常了,服务器的状态就很危险,top的负载类似每秒的运行队列(load average: 0.06, 0.60, 0.48)。如果运行队列过大,表示你的CPU很繁忙,一定会造成CPU使用率很高。
b:表示阻塞进程(等待IO的进程数量),如果值比较大,说明当前IO比较繁忙,处理较慢
memory:
swpd:虚拟内存已使用的大小,大于0表示集群物理内存不足;如果不是程序内存泄漏的原因,那么应该升级内存,或者将消耗内存多的任务迁移到其他机器。
free:空闲的物理内存大小
buff:用作缓存的内存大小
cache:直接用来记忆我们打开的文件,给文件做缓冲(linux/unix把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快的被使用)如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小
swap:(交换空间,单位:KB);内存够用的时候,这2个值都是0,如果这2个值长期大于0时,表示物理内存不够用或者内存被泄漏了
si:每秒从交换区写到内存的大小;
so:每秒写入交换区的内存大小;
io:(单位 块/秒)
bo:写数据到磁盘的速率,
bi:是从磁盘读的速度
system(系统);这2个值越大,会看到由内核消耗的CPU时间会越大;
in:每秒中断数,包括时钟中断;
cs:每秒上下文切换数;例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值越小越好,也太的话,需要考虑地线程或者进程的数目(比如在apach和nginx这种web服务器中,我么一般做性能测试时会几千上万个并发的测试,选择web服务器的进行可以由进程或者线程的峰值一直下调,压测,直到CS到一个比较小的值,这个进程或线程就是比较合适的值了)。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示CPU大部分浪费在上下文切换,导致CPU正常工作的时间少了,CPU没有充分利用是不可取的。
cpu:
us:用户程序执行消耗cpu时间,us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施了
sy:系统程序执行消耗CPU时间,如果太高表示调用时间长,例如IO操作频繁
id:空闲CPU时间,一般来说us+sy+id=100;一般认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统使用率
wa:等待IO时间,wa的值高事,说明IO等待比较严重,这可能有磁盘大量随机操作造成,也肯能是磁盘出现瓶颈
如果r经常大于4,且id经常少于40,表示cpu的负荷很重。
如果bi,bo长期不等于0,表示内存不足。
如果disk经常不等于0,且在b中的队列大于3,表示io性能不好。
1.)如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU。
2.)如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢。
3.)如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us)系统则面临着CPU资源的短缺。
当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat, ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些sql语句不合理等等都会造成这样的现象.
一般情况下,如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用。

浙公网安备 33010602011771号