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://www.bubuko.com/infodetail-2591698.html