LinuxC完成cpu负载计算

  1. 查看CPU负载的作用:
    1. CPU利用率:显示的是程序在运行期间实时占用的CPU百分比。
    2. CPU负载:显示的是一段时间内正在使用和等待使用的CPU的平均任务数量。CPU利用率高不代表负载一定大。举个例子:有个程序一直跑CPU的运算功能,CPU使用率到达100%,负载趋近1,因为CPU仅仅负责一个工作,如果跑两个这样的程序,CPU负载会到2,利用率还是100%。也就是说,当CPU工作负载越大,代表CPU必须要在不同的工作之间进行工作切换。
    3. CPU负载百分比计算:把任务进程除以cpu核心数得到负载比,乘以100得到百分比,超过百分之一百的数代表进程再排队。
  2. 负载与利用率分析:
    1. 负载高,使用率低:说明等待任务多,或者程序死掉造成D状态的进程堆积
    2. 利用率高,负载低:说明任务少但是任务执行时间长,可能程序本身有问题,通常发生再需要计算密集型任务,即大量生成耗时短的计算任务。
  3. 负载计算实现
    1. 首先读取/proc/loadavg文件内容获取cpu负载数。
    2. 把读取到的字符串通过函数atof转换为浮点数
    3. 通过sysconf函数中的_SC_NPROCESSORS_ONLN方法获取CPU核心数
    4. 把atof转换出的浮点数除以核心数乘以100加%得到负载
      #include 
      #include 
      #include 
      #include 
      #include 
      int main(int arc, char *argv[])
      {
      	char buff[20];
      	char *dest;
      	while(1){
      	FILE *fd = fopen("/proc/loadavg","r");
      	if (fd != NULL){
      		fscanf(fd,"%s",buff);
      		fscanf(fd,"%s",buff+5);
      		fscanf(fd,"%s",buff+10);
      		float at_1 ,at_2 , at_3;
      		at_1 = atof(buff);
      		at_2 = atof(buff+5);
      		at_3 = atof(buff+10);
      		fclose(fd);
      		puts("");
      		int core =sysconf(_SC_NPROCESSORS_ONLN);
      		
      	//	printf("%c",buff[9]);
      		puts("");
      }
      	else 
      		printf("打开失败");
      
      	sleep(5);
      }
      	return 0;
      }
      

你可能感兴趣的:(c++,c语言)