确定CPU利用率

13 c linux embedded-linux

在Linux中是否有命令或任何其他方法来获取当前或平均CPU利用率(对于多处理器环境)?

我在一个小系统中使用嵌入式Linux.基本上,我需要确定CPU利用率,因此如果它很高,我可以将新进程转移到系统中的另一个控制器,而不是在主处理器上执行,主处理器可能忙于执行更重要的进程.

这个问题不仅仅是为了优先处理进程,另一个控制器可以充分处理新进程,只是当主处理器不忙时,我宁愿它执行.

小智 26

经过多次搜索和修补后,问题的答案:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    long double a[4], b[4], loadavg;
    FILE *fp;
    char dump[50];

    for(;;)
    {
        fp = fopen("/proc/stat","r");
        fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3]);
        fclose(fp);
        sleep(1);

        fp = fopen("/proc/stat","r");
        fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3]);
        fclose(fp);

        loadavg = ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]));
        printf("The current CPU utilization is : %Lf\n",loadavg);
    }

    return(0);
}
Run Code Online (Sandbox Code Playgroud)

我获得的值与系统监视器报告的值相同.

  • 最近有一个关于 [从 /proc/stat 收集 CPU 利用率](https://www.idnt.net/en-GB/kb/941772) 的解释,其中包括 bash 中的一个示例。 (2认同)

ogu*_*alb 11

cat /proc/stat
Run Code Online (Sandbox Code Playgroud)

你会看到这样的东西

cpu  178877 11039 58012 5027374 22025 2616 1298 0 0
cpu0 122532 8808 34213 2438147 10881 1050 448 0 0
cpu1 56344 2230 23799 2589227 11143 1565 850 0 0
Run Code Online (Sandbox Code Playgroud)

只需取前三个数的和,然后将它们除以前四个整数的和

前4个数字是用户,不错,系统和空闲时间

注意:这给出了整体平均值.如果你想采取自发平均值,你应该采取两个样本并在除法之前相互减去它们.


caf*_*caf 9

您需要/proc/stat两次对值进行采样,并计算该时间内的平均利用率.(瞬时利用并没有多大意义 - 在单核计算机上它总是100%,因为你的实用测量代码在它看起来都在运行).