确定CPU利用率

有没有一个命令或任何其他方式来获得Linux中的当前或平均CPU利用率 (针对多处理器环境)?

我在一个小系统中使用embedded式Linux。 基本上,我需要确定CPU的利用率,所以如果它很高,我可以把一个新的进程转移到系统中的另一个控制器上,而不是在主处理器上执行,这可能正在忙着做一个更重要的过程。

这个问题不是关于仅仅优先化进程,另一个控制器可以充分处理新进程,只是当主处理器不忙时,我更愿意执行。

Solutions Collecting From Web of "确定CPU利用率"

您需要两次对/proc/stat中的值进行采样,并计算此时的平均利用率。 (即时利用并没有什么意义 – 在一台核心机器上,它总是100%,因为你的实用程序测量代码只要看起来就运行)。

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

 #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); } 

我得到的值与系统监视器报告的值相同。

 cat /proc/stat 

你会看到这样的事情

 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 

简单地把前三个数的总和除以前四个整数的和

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

注意:这给整体平均。 如果你想采取自发平均,你应该采取两个样本,并在分裂之前相互减去它们。

/ proc文件系统有各种有趣的信息。 看看man proc的更多信息。

如果可用,只需使用top。 您可以在非交互模式下使用它:

 top -n 1 

如果你想要一些特定的东西,那么只需grep那个输出。 确切的细节将取决于您的顶部命令如何格式化其输出,但例如:

 top -n 1 | grep 'Load'