2 CPU 性能监控

2.1 CPU利用率

CPU利用率是定义CPU使用的百分比,一般分为:

  • us:用户程序占用CPU比率,实际上就是CPU执行用户程序所占时间与CPU总时间的比值
  • sy:操作系统的内核线程以及中断占用CPU的比率
  • id: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监控系统状态会节约服务器的压力。

2 CPU 性能监控_第1张图片

字段的含义:

   (1) proc 进程数目

  • r:是指运行队列中进程、线程的数目,也就是说明这些线程是可执行状态,正在等待CPU执行
  • b:当前进程阻塞,正在等待IO请求完成的数目(也就是在等资源的进程、线程数目),资源包括IO读取数据、内存交换等

  (2) memory

  • swpd:已经使用的swap空间(当空闲内存free的值小于page_low最小的阀值时,会把内存的数据写到swap中;free比较多少就不会使用swap)
  • free:空闲的物理内存(图中只剩下46M)
  • buffer
  • cache

注意:Linux的内存会被充分利用,在物理内存分配给进程后有比较多的剩余量,系统会把物理内存按当前的需要当作buffer或cache来使用,所以一般我们看到服务器的物理内存used都比较高,并不是说内存不够用了而是LInux充分利用内存的一种表现;当内存剩余量达到一个阀值,系统会字段清理一下buffer或cache来释放内存,以供进程分配使用。而windows系统只有在为进程分配内存时才利用物理内存,平时不用所以,当物理内存很大但跑的程序不多时,物理内存大部分都是处于空闲状态。

(3) swap

  • si:从虚拟内存swap把数据交换到物理内存的数量(kb/s)
  • so: 从物理内存把数据交换到seap的数量(kb/s)

(4) io

  • bi:发送到块设备的块数(块/s)
  • bo:从块设备接收到的块数(块/s)  ---------------不理解??????????

(5) system

  • in:每秒中中断的次数
  • cs:每秒中上下文切换的次数

(6) CPU

  • us:用户进程
  • sys:内核进程、系统进程
  • id:cpu空闲
  • wa:等待IO资源所占用的时间比率;CPU什么也不干等IO资源输入占用时间占CPU运行时间的比率

2 CPU 性能监控_第2张图片

如果一台服务器的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的性能情况

2 CPU 性能监控_第3张图片

 首先,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范畴应用响应速度

你可能感兴趣的:(2 CPU 性能监控)