当前位置: 首页 > 科技观察

平均负载和CPU使用率有什么区别?

时间:2023-03-15 23:07:30 科技观察

大家好,我是树哥。在性能优化中,我们经常会关注平均CPU负载这个指标。但是如果你要给我解释什么是平均负载,你能解释清楚吗?它与CPU使用率有何不同?我想很多人可能都数不清。今天我们就来看看平均CPU负载指标吧!平均负载和CPU使用率有什么区别?Linux进程状态要了解CPU平均负载,我们还需要从Linux进程状态开始。在Linux源代码的fs/proc/array.c文件中,它定义了进程的7种状态,如下:/**任务状态数组是*睡眠原因的奇怪“位图”。因此“running”为零,并且*您可以通过*简单的位测试来测试其他组合。*/staticconstchar*consttask_state_array[]={"R(running)",/*0*/"S(sleeping)",/*1*/"D(磁盘休眠)",/*2*/"T(停止)",/*4*/"t(跟踪停止)",/*8*/"X(死机))",/*16*/"Z(僵尸)",/*32*/};第一种状态:TASK_RUNNING可执行状态,缩写为R。这个状态表示进程可以在CPU上运行,即具备运行的条件。但是,可能有多个进程同时运行,但并不代表进程已经在运行。TASK_RUNNING中的进程会被放入CPU的可执行队列,然后被进程调度器分配到其中一个CPU上运行。很多操作系统教科书都把在CPU上执行的进程定义为RUNNING状态,把可执行但还没有被调度的进程定义为READY状态。这两种状态在Linux系统下统一为TASK_RUNNING状态。第二种状态:TASK_INTERRUPTIBLE可中断睡眠状态,简写为S。处于该状态的进程表示它被挂起,因为它在等待一定时间的发生,例如:等待socket连接,等待信号量等在。这些进程会被放入事件对应的等待队列中,当这些事件发生时,相应等待队列中的一个或多个进程就会被唤醒。通过ps命令我们可以看到大部分进程都处于TASK_INTERRUPTIBLE状态。这是因为只有几个CPU和成百上千个进程,所以大多数进程在某个时刻都处于休眠状态。如果绝大多数进程没有休眠,CPU将无法响应。第三种状态:TASK_UNINTERRUPTIBLE不可中断睡眠状态,简写为D。该状态类似于TASK_INTERRUPTIBLE状态,进程处于休眠状态,唯一不同的是进程不可中断。不可中断不是说CPU不响应外部硬件中断,而是进程不响应异步信号。在大多数情况下,一个进程在休眠时应该总是能够响应异步信号。即可以通过kill-15pid传递一个异步信号,程序可以响应。但有时你会惊讶地发现kill-9不能杀死一个正在休眠的进程。这时候可能是进程处于不可中断的休眠状态!TASK_UNINTERRUPTIBLE状态存在的意义在于内核的某些处理进程不能被中断。例如,当进程在某个硬件上运行时,如果发生中断,进程与硬件设备之间的交互就会中断,使设备进入不可控状态。在这种情况下,TASK_UNINTERRUPTIBLE状态总是非常短暂,基本上不可能通过ps命令捕获。第四种和第五种状态:TASK_STOPPED暂停状态,TASK_TRACED状态,简写为T。当我们向进程发送SIGSTOP信号时,它会响应该信号进入TASK_STOPPED状态。除非进程本身处于TASK_UNINTERRUPTIBLE状态并且不响应信号)。向进程发送SIGCONT信号将其从TASK_STOPPED状态恢复到TASK_RUNNING状态。第六个状态:TASK_DEAD-EXIT_ZOMBIE退出状态,简称Z。进程退出后,进程占用的所有资源都会被回收,然后进程就会变成僵尸进程(Zombie)。一般子进程先于父进程退出,父进程不会调用wait或waitpid回收子进程。此时子进程处于僵尸状态。第七个状态:TASK_DEAD——EXIT_DEAD退出状态,简称X。进程被置于EXIT_DEAD退出状态,意思是后面的代码会立即彻底释放进程。一般来说,EXIT_DEAD状态是非常短暂的,用ps命令几乎不可能捕捉到。看完Linux进程的7种状态,是不是有点懵了?其实你只需要记住,Linux有这7种状态,其中最重要的是RUNNING状态和UNINTERRUPTIBLE状态。我们来总结一下Linux的7种进程状态:TASK_RUNNING可执行状态,简写为R。TASK_INTERRUPTIBLE可中断睡眠状态,简写为S。TASK_UNINTERRUPTIBLE不可中断睡眠状态,简写为D。TASK_STOPPED暂停状态,TASK_TRACED状态,简写为T。TASK_DEAD-EXIT_ZOMBIE退出状态,简称Z。TASK_DEAD——EXIT_DEAD退出状态,简称X。平均负载的定义平均负载的定义是:单位时间内系统中处于可运行状态和不可中断状态的进程的平均数。这里的可运行状态和不可中断状态是指上面提到的进程状态。从平均负载的定义来看,它与进程的状态有关。所以,我们后面分析平均负载的时候,一定要按照这个定义来分析。对于4核CPU的机器,如果一共运行4个进程,那么每个CPU运行1个进程,此时所有的CPU刚好被占满。而如果只有2个进程,则说明CPU有50%空闲。而如果有8个进程,说明CPU超载了,平均负载达到2,但单个CPU单位时间内需要运行2个进程。我们可以通过读取/proc/cpuinfo文件来获取系统CPU信息,如下:$grep'modelname'/proc/cpuinfo|wc-l2当平均负载大于CPU个数时,说明系统出现了负载。一般来说,负载高达70%是正常的。很多人把CPUloadaverage和CPUusage混淆了,其实它们是相关的,但不是一回事。平均负载是指单位时间内可运行且不可中断的进程数。从它的定义可以看出,它不仅包括正在使用CPU的进程,还包括等待CPU和等待I/O的进程。CPU使用率是指正在使用CPU的进程,可见两者是不一样的。如果它是一个CPU密集型进程,则平均负载将上升并且CPU使用率将上升,因为该进程正在大量使用CPU。但如果是I/O密集型进程,有很多进程在等待I/O操作,此时进程处于不可中断状态,所以loadaverage会增加,但CPU占用率不一定高.可以看出,平均负载与CPU使用率有一定的相关性,但没有绝对的关系。如何检查平均负载?一般来说,我们可以通过top和uptime命令来监控服务器的平均负载。在服务器命令行输入top查看当前系统负载,如下图所示。上图中平均负载的三个值分别代表系统在1分钟、5分钟、15分钟时的平均负载。通过这三个值的变化,我们可以知道系统在最近一段时间内的压力变化趋势。例如:loadaverage:15.00,10.75,3.25表示过去1分钟的负载是15,过去5分钟的负载是10.75,过去15分钟的负载是3.25。可以看出平均负载压力越来越大。top命令输出的信息很多,有时会干扰我们的视线。所以如果你只需要看系统负载,那么可以使用uptime命令,如下图所示。-w438uptime命令只输出一行信息,非常简洁。如果需要持续查看loadaverage的变化,可以使用如下命令。该命令会不断输出最新的负载信息,并高亮显示变化的部分。watch-duptime-w499总结本文首先介绍Linux进程的7种状态,分别是:TASK_RUNNING可执行状态,简称R。TASK_INTERRUPTIBLE可中断睡眠状态,简称S。TASK_UNINTERRUPTIBLE不可中断睡眠状态,简称D。TASK_STOPPED暂停状态,TASK_TRACEDstate,简写为T。TASK_DEAD-EXIT_ZOMBIE退出状态,简写为Z。TASK_DEAD——EXIT_DEAD退出状态,简称X。然后,我们介绍了平均负载指数的定义,即单位时间内系统中处于可运行状态和不可中断状态的进程的平均数量。接下来,我们将其与CPU使用率进行对比,可知两者的区别在于,loadaverage不仅包括正在使用CPU的进程,还包括等待CPU和等待I/O的进程。CPU使用率是指正在使用CPU的进程,可见两者是不一样的。最后,我们介绍了2个用于查看平均负载指标的命令,即top和uptime命令。如果需要关注平均负载的变化,可以使用watch-duptime命令持续输出并高亮显示变化的部分。引用是从源码的角度来分析的!进程状态·理解Linux进程·望云(13篇)Linux进程状态分析之R,S,D,T,Z,X(主要有3个状态)_sdkdlwk的博客-CSDN博客_ProcessdStatusLinux进程状态(psstat)详解-火星小编-博客园