The CPU load and usage innocently tell (rpm)

Transfer:  https://www.cnblogs.com/yunxizhujing/p/9382396.html


1. What is the Cpu Load

Use uptime, top, or view the / proc / loadavg can see the CPU load statistics, there are three values, respectively, on behalf of one minute, five minutes and 15 minutes of CPU Load situation. Most people think of these three values the smaller the better, if the higher the system load is too high or there may be a problem. That value is what this state is good and what is bad? When do I need attention and examine the reasons of high?
LOAD AVERAGE: a period of time in a runnable state and non-state average number of interruptions in the process. (Runs into running processes and are waiting for the CPU process, state R; uninterruptible it is doing some of the work can not be interrupted, such as waiting for disk IO and so on, its status is D), it is from another angle reflect CPU usage.
LOAD how to understand the meaning of it?

The kiosk of FIG. 1 can be understood as a CPU core. From the process can be seen in the figure of the concept of load, and usage always 100%.

What is the ideal CPU load

This with you about the number of CPU cores, ideally a core occupied a process, if you are four core, then ran four process, but this time Load 4 is not high, if you have only two cores, still It runs 4 processes, which means that half of the process grab CPU at a certain moment, this time Load or 4, if short-term state also does not matter if this is a long-term state you should pay attention.

Multi-processor and multi-core CPU

对于性能而言一个双核CPU和2个单核CPU是差不多的,当然一些细小区别是CPU的缓存、进程可能会在多个CPU上切换等。除了这些对于LOAD而言,核心个数才是最重要的,有多少个物理处理器不重要。
对于一个4核心处理器的系统来说,一个LOAD为3.00依然很健康,因为LOAD相对于处理器的核心数来说,100%使用率在一个单核处理器上的load是1.00,那么在一个双核处理器上就是2.00,在一个4核心处理器上就是4.00。
回到桥的那个例子,如果桥只有1条车到那么LOAD是1.00表示桥达到最大承载能力,如果在一个有2条车道的桥上1.00表示桥的负载啊是50%,1条车道满了,另外一条空闲可以继续通行。
所以对于有多核心CPU的系统来说最大LOAD是最大的核心数量,你的LOAD不应该超过最大核心数量。2CPU、每个CPU有6个物理核心、算上超线程最终的逻辑CPU个数是24个。比如在Linux查看如下:

这里一个processor就算一个核心,虽然这里的数量是通过因特尔的超线程模拟出来的

应该关注哪个值

应该关注5分钟或者15分钟,因为CPU偶尔高一些比较正常,但是如果最近15分钟都很高就需要调查了。

查看Linux系统物理CPU个数、核心数和逻辑CPU个数

总核数 = 物理CPU个数 * 每个物理CPU的核心数
总逻辑CPU数 = 物理CPU个数 * 每个物理CPU的核心数 * 超线程数量

1
2
# 查看物理CPU个数
cat  /proc/cpuinfo grep  "physical id" sort uniq wc  -l

1
2
查看每个物理CPU中的核心数
cat  /proc/cpuinfo grep  "cpu cores" uniq

1
2
查看逻辑CPU的个数
cat  /proc/cpuinfo grep  "processor" wc  -l

2. 什么是CPU使用率

使用率这个要结合时间片来说,从上图的演变可以看出影响使用率高低的因素不是LOAD的多少,而是在分配给某个进程时间片时,这个进程是否使用了CPU的计算能力。
在第四分钟时候,分配给蓝人1分钟,但是它什么也没干,这1分钟内电话是闲置的没有被使用,所以这一分钟内的电话使用率就是0%。但是LOAD是3。
当然这里就存在一个统计周期的问题,上图我们的统计周期是1分钟,而分配给每个人的最小时间单位也是1分钟。从计算机角度来说,单核心CPU,假设1秒钟分为100个时间片,如果2个任务,第一个任务用了5个时间片执行完成,另外一个任务用了15个时间片执行完成,所以如果统计周期是1秒,那么这1秒内的CPU使用率就是20%。CPU利用率高不一定负载高。利用率是一段时间内CPU被占用的情况。
CPU负载高利用率低:说明等待执行的任务很多,但是通常任务多CPU使用率也会比较高,如果低就说明CPU根本没工作,哪些很多的任务处于等待状态,可能进程僵死了。可以通过命令ps –axjf查看是否存在D状态的进程,该状态时不可中断的睡眠状态。这种状态无法被KILL。而有时候你通过top命令也看不出来,只能显示LOAD高,但是没有哪个进程的CPU使用率明显高,你可以通过ps –ux来查看。
CPU利用率高负载低:说明任务少,但是任务执行时间长,有可能是程序本身有问题,如果没有问题那么计算完成后则利用率会下降。

3. CPU多核心和多线程

CPU的组成是由控制器(Control Unit 负责调度)和运算器(Processing Unit 运算处理单元)组成。
单核CPU:一个分配工作的、一个具体干活的,来了一个任务那么先有控制器进行进行调度,如果此时运算器空闲那么就直接由运算器进行处理,如果此时运算器正在处理其他任务那么这个后来的任务就需要等待。
多核CPU:就是每个核心都有一组控制器和运算器。比如I5是4核心,简单来说他可以并行处理四个任务。假设这时候同时来了8个任务,那么分配到四个核心上相当于4个队列,此时每个队列只有2个任务。相比单核心CPU执行效率会大大提高。

什么是超线程

超线程(HT):超线程和多线程不同,多线程是程序方面的属于软的代码级别的,超线程是硬件架构方面的,通过控制器来模拟逻辑核心。
超线程有什么作用?其实也是为了提高效率更高的榨干控制器的运行能力。为什么这么说呢,因为任务过来之后很多时候不是马上就能由运算器进行计算的,它还需要其他资源比如网络传输过来的数据或者是硬盘中的数据,那么此时运算器就闲着,为了更大限度利用运算器,我可以设置2个控制器对应一个运算器,其中一个控制器处理的程序需要等待数据的时候,如果另外一个控制器处理的程序不需要等待或者数据已经准备好,那么就可以立即发送给运算器进行计算。
下图蓝色和橙色都是CPU的运算器在工作,白色表示运算器空闲。A图是单核心、B图是双核心、C图是单核心启用超线程,可以看到C图的CPU利用率最大。

多线程有什么缺点

争抢:核心上运算器只有一个,但是控制器2个,如果来的一个任务那么这两个控制器就需要协调一下谁来处理,所以这个会有一定损耗。这就相当于线程池中的惊群概念。
发生拥挤:物理核心太多如果开启HT则逻辑核心增加一倍,如果这时候来了几百个任务,如何分配这些任务到哪些核心上就是个问题,虽然这是由操作系统来做的调度但是也会有额外损耗,相反你只有一个我就根本不需要考虑分配的问题。

4. 一次问题排查

查看队列长度,r表示运行和等待CPU时间片的进程数量;b表示等待资源的进程数量比如IO、或者内存交互等。

查看进程中哪个线程使用率高

根据线程来查看具体代码。
你也可以直接杀死这个进程。我这里直接杀死,然后LOAD就下降了。

Guess you like

Origin www.cnblogs.com/zdfjf/p/11276649.html