目录:导读
前言
1、cpu指标要求
建议CPU指标如下:
对于每一个CPU来说运行队列不要超过3,例如,如果是双核CPU就不要超过6;
如果CPU在满负荷运行,应该符合下列分布:
User Time:65%~70%,us过大,说明有用户进程占用很多cpu时间,需要进一步的分析其它软硬件因素。
System Time:30%~35%,sy过大,说明系统管理方面花了很多时间,说明该系统中某个子系统产生了瓶颈,需要进一步分析其它软硬件因素。
User Time+System Time,合理值范围是 60-85%,如果在一个多用户系统中us+sy时间超过85%,则进程可能要花时间在运行队列中等待,响应时间和业务吞吐量会受损害
Idle:0%~5%,CPU完全空闲的百分比
对于上下文切换要结合CPU使用率来看,如果CPU使用满足上述分布,大量的上下文切换也是可以接受的。
出现cpu计数器不在范围时,不一定是由于cpu资源不够,因为其他资源的也会引起,例如内存不够时,cpu会忙内存管理的事,表面上可能是cpu的利用为100%
2、cpu3个重要概念
有3个重要的概念:上下文切换(context switchs),运行队列(Run queue)和使用率(utilization)
1)查看运行队列,使用top或者uptime查看:
每个CPU都会维持一个运行队列,理想情况下,调度器会不断让队列中的进程运行。进程不是处在sleep状态就是run able状态。
如果CPU过载,就会出现调度器跟不上系统的要求,导致可运行的进程会填满队列。
队列愈大,程序执行时间就愈长。
“load”用来表示运行队列,用top 命令我们可以看到CPU一分钟,5分钟和15分钟内的运行队列的大小。
这个值越大表明系统负荷越大。用uptime得到的3个负载值除以逻辑CPU数,如果3个结果值均>1,则表示CPU过载。
2)查看上下文切换,使用vmstat查看cs:
每个CPU(或多核CPU中每个核心)在同一时间只能执行一个线程,Linux采用抢占式调度,线程的处理器可以在同一时间运行多个线程(包括多核CPU),Linux内核会把多核的处理器当作多个单独的CPU来识别;
即为每个线程分配一定的执行时间,当到达执行时间,