linux /proc/stat 计算线程cpu,Linux下用/proc/stat文件来计算cpu的利用率(附源码)

总的Cpu使用率计算

计算方法:

1、采样两个足够短的时间间隔的Cpu快照,分别记作t1,t2,其中t1、t2的结构均为:

(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

2、计算总的Cpu时间片totalCpuTime

a)把第一次的所有cpu使用情况求和,得到s1;

b)把第二次的所有cpu使用情况求和,得到s2;

c)s2 - s1得到这个时间间隔内的所有时间片,即totalCpuTime = j2 - j1 ;

3、计算空闲时间idle

idle对应第四列的数据,用第二次的idle - 第一次的idle即可

idle=第二次的idle - 第一次的idle

4、计算cpu使用率

pcpu =100* (total-idle)/total

5、同理可以用同样的方法求出其他进程和线程所占cpu资源

源码

#include

#include

#include

#define __DEBUG__ 1

#define CK_TIME 1

int main(int argc ,char *argv[])

{

FILE *fp;

char buf[128];

char cpu[5];

long int user,nice,sys,idle,iowait,irq,softirq;

long int all1,all2,idle1,idle2;

float usage;

while(1)

{

fp = fopen("/proc/stat","r");

if(fp == NULL)

{

perror("fopen:");

exit (0);

}

fgets(buf,sizeof(buf),fp);

#if __DEBUG__

printf("buf=%s",buf);

#endif

sscanf(buf,"%s%d%d%d%d%d%d%d",cpu,&user,&nice,&sys,&idle,&iowait,&irq,&softirq);

/*

#if __DEBUG__

printf("%s,%d,%d,%d,%d,%d,%d,%d\n",cpu,user,nice,sys,idle,iowait,irq,softirq);

#endif

*/

all1 = user+nice+sys+idle+iowait+irq+softirq;

idle1 = idle;

rewind(fp);

/*第二次取数据*/

sleep(CK_TIME);

memset(buf,0,sizeof(buf));

cpu[0] = '\0';

user=nice=sys=idle=iowait=irq=softirq=0;

fgets(buf,sizeof(buf),fp);

#if __DEBUG__

printf("buf=%s",buf);

#endif

sscanf(buf,"%s%d%d%d%d%d%d%d",cpu,&user,&nice,&sys,&idle,&iowait,&irq,&softirq);

/*

#if __DEBUG__

printf("%s,%d,%d,%d,%d,%d,%d,%d\n",cpu,user,nice,sys,idle,iowait,irq,softirq);

#endif

*/

all2 = user+nice+sys+idle+iowait+irq+softirq;

idle2 = idle;

usage = (float)(all2-all1-(idle2-idle1)) / (all2-all1)*100 ;

printf("all=%d\n",all2-all1);

printf("ilde=%d\n",all2-all1-(idle2-idle1));

printf("cpu use = %.2f\%\n",usage);

printf("=======================\n");

fclose(fp);

}

return 1;

}0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值