################################ vmstat详解 ############################
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数
vmstat是Virtual Memory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。
它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。
vmstat -S m 1 表示每秒统计一次,并且一直统计
vmstat -S m 1 10 表示每秒统计一次,并且统计10次
第一行:进程、内存、交换区、IO操作、System信息、cpu信息
r: 运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
b: 处于uninterruptible sleep的进程数,等待IO的进程数
内存:
s swpd:使用的虚拟内存总量;
s free:空闲内存总量;
s buff:被缓冲区buffer使用的内存总量;
s cache:被作为cache使用的内存总量
swap:[/s]
s si:从磁盘换入的内存量;每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉
s so:从内存换出到磁盘的内存量;每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上
cpu:
us:表示用户态cpu使用率,即应用获得cpu执行时间占用cpu总时间的百分比,占比高并不表示系统瓶颈。
sy:表示系统态cpu使用率,常指系统调度占用cpu总时间的百分比。
id:表示系统空闲时间百分比。
获得这三项数据的目的是为了分析、减少sy的百分比,实际上要判断导致应用异常需要综合很多监控数据,具体靠经验。
s bi:从块设备接受;块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte
s bo:发送到块设备;块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
bi = block in = 读磁盘IO
bo = block out = 写磁盘IO
s in:每秒的中断次数;
s cs:每秒上下文切换的次数
常见问题处理
如果r经常大于4,且id经常少于40,表示cpu的负荷很重。
如果bi,bo长期不等于0,表示内存不足。
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语句不合理等等都会造成这样的现象.
内存问题现象:
内存的瓶颈是由scan rate (sr)来决定的.scan rate是通过每秒的始终算法来进行页扫描的.如果scan rate(sr)连续的大于每秒200页则表示可能存在内存缺陷.同样的如果page项中的pi和po这两栏表示每秒页面的调入的页数和每秒调出的页数.如果该值经常为非零值,也有可能存在内存的瓶颈,当然,如果个别的时候不为0的话,属于正常的页面调度这个是虚拟内存的主要原理.
解决办法:
1.调节applications & servers使得对内存和cache的使用更加有效.
2.增加系统的内存.
3. Implement priority paging in s in pre solaris 8 versions by adding line "set priority paging=1" in /etc/system. Remove this line if upgrading from Solaris 7 to 8 & retaining old /etc/system file.
关于内存的使用情况还可以结ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的内存的使用情况,和那些进程在占用大量的内存.一般情况下,如果内存的占用率比较高,但是,CPU的占用很低的时候,可以考虑是有很多的应用程序占用了内存没有释放,但是,并没有占用CPU时间,可以考虑应用程序,对于未占用CPU时间和一些后台的程序,释放内存的占用。