Loading... 关于CPU的先关指标,我也是查了以后忘记,再去查。反反复复不下三四次,总是忘记。这次我得把我查到的,理解到的的给完整的写下来。后面忘了翻看下自己写的,毕竟网上很多人写的,看着并不直观透彻。我翻看了很多内容。觉得好的文章,加上理解后重新写一下。 ## 一、CPU指标简述 其实我们常看到cpu使用率的单位后面都带%这个没错,但是很多单位都能换算到百分比,比如长度、温度等我设定10米范围那1米就是10%。那CPU真实单位到底是什么呢?是时间,百分号是指每个ticks时钟周期(时钟中断的时间间隔),统计到的所有进程占用CPU的平均时间。以下是一些大概的解释。 ### Linux idle: cpu空闲时间 iowait: CPU空闲时,有任务正在做磁盘io操作时间 irq: 硬中断处理时间(需要立即执行,一般称为接口上半部),常见的为由外设触发如键盘 nice: 进程优先级的处理时间(其中的优先级其实就是在cpu的一个ticks时钟中断的时间间隔内给多个进程分配的cpu占用时间) softirq: 软中断处理时间(可被延迟执行,一般称为接口的下半部),比如摘取网卡的RingBuffer至内存处理。 steal: 只有虚拟机需要关注此指标。它表示真正的 CPU 对当前虚拟机不可用的时间-虚拟机管理程序从该VM“偷走”了该 CPU(用于运行另一个VM,或用于其自身需求)。如果特定虚拟机上的“Steal 时间”很高,则表明该虚拟机在过载或者负荷较大的物理主机上运行。 system: 处理内核态的时间 user: 处理用户态的时间 ### Windows dpc: 相当于linux中的软中断 idle: cpu空闲时间 interrupt: 相当于linux中的硬中断 privileged: 处理内核态的时间 user: 处理用户态的时间 ## 二、原理剖析 看了上面指标,可能会指标存在一些疑问,计算机内核是怎么统计出来这些指标的呢?往下看可能会更加理解这些指标是如何统计的及其含义。 ### 如何统计 假如我们cpu的频率是2.50GHz,也就是一秒钟内cpu可以发生2.5G次晶震(运算)。可通过如下查看到HZ为1000,HZ为每秒时钟中断的数量,也就是ticks的单位为1/1000秒。则系统会在每个ticks期间采集一次数据。假如有ABC三个进程,采集的刹那只有A进程,下一次采集到C进程。采集1000次(1秒)以后,通过采集到的次数以及进程优先级等等换算CPU占用情况。 ```shell [root@wxy boot]# cat config-3.10.0-1062.4.3.el7.x86_64 |grep -i config_hz` CONFIG_HZ_1000=y CONFIG_HZ=1000 ``` ### 指标由来 进程是有优先级的,但是这里的优先级并不是指哪个进程优先执行。而是像分蛋糕一样,每个ticks期间拥有2.5G/1000 = 2.5M的HZ可以分配。如下图A优先级低分到20HZ、B还行分到40HZ、C很高分到60HZ,当然进程执行和停止随运行实际情况也是有前后之分。另外进程的优先级是可以通过nice调用调整的。但这个会导致cpu重新计算分配蛋糕,所以看到的nice指标就是这么来的。剩余没有分配的HZ那就是idle指标。这里有个特殊情况由于磁盘原因,CPU调用写入磁盘很慢的时候,CPU会进入等待,这就是iowait指标。 <img src=https://storage.bbcking5.com/%E6%96%87%E7%AB%A0%E5%86%85%E9%83%A8%E5%9B%BE/CPU%E6%80%A7%E8%83%BD%E6%8C%87%E6%A0%87%E6%80%BB%E7%BB%93/cpu.jpg-wuxingyuwordpresspic style="zoom:50%;" /> 剩下硬、软中断、内核态、用户态也一起介绍了吧,如下图(借张彦飞大佬图一用),当进程进入系统调用进入协议栈就是进入了内核态。内核需要调用驱动程序发送,当硬件发送完成后反馈中断通知。这里用户态转变内核态,cpu需要将用户态进程挂起 ,将指令放入寄存器再调用内核态指令,也就是常看到的上下文切换的意思。 硬中断和软中断的区别是:硬中断是立即执行,且不会占用CPU太长时间。基本都是外设发起硬中断信号。软中断由内核发起的中断信号,排期执行,可以占用CPU稍长时间。 所以正常我们看到的,cpu使用率升高时候,一般都是user用户态的使用率高其次system内核态的使用率。如果其他使用率高,那一定是有问题。 <img src=https://storage.bbcking5.com/%E6%96%87%E7%AB%A0%E5%86%85%E9%83%A8%E5%9B%BE/CPU%E6%80%A7%E8%83%BD%E6%8C%87%E6%A0%87%E6%80%BB%E7%BB%93/cpu%E6%80%81.jpg-wuxingyuwordpresspic style="zoom:50%;" > ## 三、十年磨一剑 监控看着简单,实则很难。系统层到各种中间件、数据库、再到应用接口所有主流应用都需要知道相关指标背后的原理。才能更好制定相关指标,以及定位问题。非但如此,还得考虑实现这些指标监控的承载架构,这里也不是简简单单部署一套东西配置下就够的,需要考虑到后续维护的人力成本,各个繁杂步骤都需要依靠开源技术产品进行自动化纳管。 最后感谢看到最后的小伙伴! Last modification:May 29, 2024 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏