2.1 CPU利用率
CPU利用率是定义CPU使用的百分比,一般分为:
2.1.1 上下文切换
多数现在处理器都能运行一个进程或线程,多路超线程处理器有能力运行多个线程;一个标准的LInux内核可以运行50--5万个线程,当内核同时处理多个线程时,内核将调度并均衡每个进程线程,每个线程都分配一个在处理器中被开销的时间额度;当正获取CPU控制权的线程达到设置的时间额度或有高优先级的中断时,CPU才会停止对当前线程的操作,进而对先一个线程操作,把这种CPU从一个线程切换到另一个线程就叫上下文切换
2.1.2 运行队列
每一个CPU都维护一个线程的运行队列,理论上,调度器应该不断的运行和执行线程,进程和线程不是在sleep状态(指的是阻塞和IO等待中)就是在可运行状态;如果CPU子系统处于高负荷下(进程、线程比较多),那就意味着内核调度将无法及时响应系统请求,导致结果是可运行状态进程拥塞在运行队列里(很长时间不能执行),当运行队列越来越来大时,进程线程将花费更多的时间获取PU控制权来执行。
一般用load来查看CPU的负载情况,一般当load的值 >= LinuxCPU的核数就说明CPU高负荷;例如:linux是 8核,则load1 load5 load5的值小于8 则CPU是正常的
2.2 CPU性能监控
理解运行队列、利用率、上下文切换对CPU性能最优化之间的关系;
运行队列(Run Queues):每个处理器应该运行队列不超过1-3个线程.比如,一个双核处理器运行队列不超过6个线程(公司是8core,一般top中running的tasks不超过8*3=24)
CPU Utiliation(CPU 利用率):如果一个CPU被充分利用,利用率分类之间均衡的比例应该是:
user time:65%----70%
system time:30%----35%
id time:0%----5%
注意:在id占的比率越小说明CPU空闲时间比较多,CPU可定够用;上述比率是在CPU被充分利用时的比率;但实际生产环境是id大于40%
注:大量的上下文切换(Context Switches) 直接影响到CPU的利用率,如果cpu的利用率保持在上述均衡状态,则大量的上下文切换是正常的。
2.2.1 vmstat工具的使用
vmstat 工具提供了一种低开销的系统性能观察方式,因为vmstat本事就是低开销工具,在非常高负荷的服务器上,用vmstat监控系统状态会节约服务器的压力。
字段的含义:
(1) proc 进程数目
(2) memory
注意:Linux的内存会被充分利用,在物理内存分配给进程后有比较多的剩余量,系统会把物理内存按当前的需要当作buffer或cache来使用,所以一般我们看到服务器的物理内存used都比较高,并不是说内存不够用了而是LInux充分利用内存的一种表现;当内存剩余量达到一个阀值,系统会字段清理一下buffer或cache来释放内存,以供进程分配使用。而windows系统只有在为进程分配内存时才利用物理内存,平时不用所以,当物理内存很大但跑的程序不多时,物理内存大部分都是处于空闲状态。
(3) swap
(4) io
(5) system
(6) CPU
如果一台服务器的vmstat如上图所示,能得到一下结论:
(1) 前提知道次服务器是单CPU:所以在运行队列中等待的进程、线程不能超过3个,所以有2个超过了,但运行队列还在可以控制的范围之内
(2) system中 in比较多,cs比较少;cs比较少说明上下文切换不多(一个或少数几个进程在运行),in比较多,说明中断比较多(中断一般是硬件请求);所以我们可以认为是某一个进程正在进行硬件请求(比如打印机)
(3) 如果us占的比率比较大 (85%以上),而且cs不多则说明此用户进程仍在运行中
2.2.2 mpstat的使用
如果你服务器是多核CPU,则可以用mpstat工具来监控每个独立的CPU芯片
mpstat -P ALL 1 其中 -P是指定core数 -P 3 则显示core编号为3的性能情况; ALL 所有的core的性能情况
首先,CPU列 0--7 说明:服务器是8core的服务器
然后说明了每个cpu core 具体的性能监控
2.3 CPU性能总结:
1. 坚持system的运行队列,让等待的数目不超过 core数量 * 3
2. 如果CPU 全部用完,则us:sy = 7:3 才是正常的,如果sy占的比率大于30%(正常配置不能满足,需要占用更多的资源),则说明已经超负荷需要重新调整优先级
3. 当I/O时间比较长,即 wa的直比较大,会影响CPU范畴应用响应速度