二、用vmstat命令查看监控系统的状态
我们用w命令学会了查看负载情况,如果出现了负载值偏高的情况,如查询的数字大于CPU核数了,说明CPU不够用了。此时就需要思考CPU不够用的原因,进程在干什么,都有哪些任务在使用CPU,你可能想去查看系统的瓶颈在哪里。
可以查到CPU核数,内存,虚拟内存交换分区,io就是磁盘,系统的进程等等相关的东西。经常使用vmstat 1命令,每隔一秒输出一次状态,感觉差不多可以Ctrl C结束。
当然也可以vmstat 1 5,每隔一秒输出一次状态,输出5次结束。
我们只需要关心如下几列:
2.1 proc显示进程的相关信息:
r,是run的简写,表示系统中有多少进程是属于run的状态。如果只有一个CPU,那某一个时间点只可能有一个进程在使用CPU,其他进程都在排队。但它们那是循环的,每个进程都有机会使用CPU,都可以使用一会儿。不管是在使用还是在排队,都是处于r的状态。如果该数值长期大于服务器CPU的个数,则说明CPU资源不够用了。
b,是block的缩写,表示等待资源的进程数。b就是说进程被CPU以外的资源(硬盘或者网络)给阻断了,处于一个等待状态,卡死了,b被堵死了。比如说网速慢,进程想要给你发一个数据包,假如网速很快,只需要1秒就发完了。但是现在速度慢,可能就花了10秒钟,就是因为网速太慢,这个时候只能等网速了,这就是有多少进程在等待了。
2.2 memory显示内存的相关信息
swpd,表示切换到交换分区中的内存数量,单位为KB。以前讲分区时,有个swap交换分区,当内存不够时,系统可以把内存中的一部分数据临时放到swap空间里面去。如果这个数字不变,那还好;如果这个数字在持续不断的变化,那说明内存和交换分区在持续不断的交换数据,这就说明内存不够了。
2.3 swap显示内存的交换情况
si、so和swapd相关,如果swapd频繁变化,那他们也会相应发生变化。
si:表示有多少数据(块)是由swap交换区进入内存中的,单位为KB。i表示in,进入内存的。o表示out,so表示有多少是从内存中出来的。
2.4 io显示磁盘的情况
bi,bo是和磁盘有关系的。bi表示从块设备读取数据的量(读磁盘),单位为KB。bo表示从块设备写入数据的量(写磁盘),单位为KB。这个数据量很大,说明磁盘在频繁的读写。io相比较磁盘来说,是很慢的。如果有那么多的数据读写,肯定会造成并列增加,因为有很多进程在等待磁盘,这个是必然的。
2.5 显示CPU的使用状态
us:表示用户级别的,比如说一个操作系统,肯定不可能只运行一个系统,还有跑一些服务。比如跑了一个网站,跑了一个MySQL,网站也好,MySQL也好,肯定会占一些资源,它就会体现us这一方面了,user占用的情况。us的数字是不会超过100的,因为一共就100%。us数字表示用户下的资源占用CPU的百分比,us长期大于50就说明系统资源不够了。
sy:显示系统本身花费CPU的时间百分比。
id:表示空闲的百分比us+sy+id=100
wa:wait等待,表示I/O等待所占用CPU的时间百分比,这一列很大,说明CPU不够用了。
通过vmstat命令可以判定出系统的瓶颈,如CPU不够,内存不够,还是磁盘io太大。