cpu,内存和磁盘的关系:cpu取数据时,cpu发出指令先去内存找,内存找不到再去磁盘找,找到后从磁盘读到内存然后加载到cpu。cpu是执行任务,内存和磁盘是存储的。他们三个是相互制约相互依赖。所以有瓶颈时需要综合考虑。
例如,cpu很高可能是内存导致的,像垃圾回收,内存不足时需要消耗cpu做垃圾回收。
运行队列:一核cpu在同一时刻只能处理一个任务。例如来了一个线程,处于准备运行状态,cpu把它取出来执行。如果来了多个可运行状态的线程,这一个核的cpu只能执行一个,其他需要去排队,这就形成一个队列。排队的线程越多对cpu的压力越大。可运行状态的线程在排队时在不断抢夺cpu资源。
在不同工具里运行队列名字不一样:top里load average 就是队列数,三个时间段的平均值。vmstat里r列是队列数。spotlight里是queue length 。
context switches上下文切换:cpu处理排队的线程是在不断的切换的,例如执行第一个线程一分钟,然后切换到第二个线程二分钟,这样不断切换中,让大家感觉到cpu都在处理所有线程。
interrupts中断:就是cpu正在处理某个线程时被打断,就是优先级更高。中断一般都是硬件引起的,比如鼠标和键盘,优先级最高。
在vmstat中in是中断,cs是上下文切换。
cpu利用率:在windows中有个线程是sysrem idel process,就是cpu空闲利用率,这个越高就是cpu越闲。cpu利用率就是在一小时内有50分钟在处理这个线程,利用率就是50/60。在多核处理器中我们会看到多个线程都是很高的利用率,是因为多核都在处理。
vmstat中id就是idel空闲。越大cpu越空闲。
压测时cpu很闲也有问题。说明cpu压不上去
vmstat中us是用户态cpu,sy是内核态cpu,上下文切换多就是sy高。基于网络环境下,网络环境有io引起中断,需要消耗sy,所以us:sy最好是7:3。
vmstat 中的id 是真空闲 , wa 是等待io的空闲就是一直等待io读写。
原文地址:http://blog.51cto.com/13693838/2113830