利用/proc/stat/文件信息计算cpu利用率

内核在文件/proc/stat中保存了有关自身活动的各种信息。所有的统计数字都是自系统启动后累加起来的。使用cat命令简单的查看下文件:
在这里插入图片描述
通过查看Linux系统下该文件的信息,我们可以初步计算出系统CPU的利用率,代码如下:

double gCpuRate;  //挑选一个稳定的线程,定期(3秒)刷gCpuRate

typedef struct CPU_INFO
{
	char name[20];
	unsigned int user;
	unsigned int nice;
	unsigned int system;
	unsigned int idle;
	unsigned int iowait;
	unsigned int irq;
	unsigned int softirq;
}CPU_INFO;

double cal_cpu_occupy(CPU_INFO *o, CPU_INFO *n)
{
	double od, nd;
	double id, sd;
	double cpu_use;

	od = (double)(o->user + o->nice + o->system + o->idle + o->softirq + o->iowait + o->irq);
	nd = (double)(n->user + n->nice + n->system + n->idle + n->softirq + n->iowait + n->irq);

	id = (double)(n->idle);
	sd = (double)(o->idle);

	if (0 != (nd - od))
	{
		cpu_use = 100.0 - ((id - sd))/(nd - od)*100.00;
	}
	else
	{
		cpu_use = 0;
	}
	return cpu_use;
}

void get_cpu_occupy(CPU_INFO *cpuinfo)
{
	FILE *fd;
	int n;
	char buff[256] = {0};

	fd = fopen("/proc/stat", "r");
	fgets(buff, sizeof(buff), fd);

	sscanf(buff, "%s %u %u %u %u %u %u %u", cpuinfo->name, &cpuinfo->user, &cpuinfo->nice, &cpuinfo->system, \
		&cpuinfo->idle, &cpuinfo->iowait, &cpuinfo->irq, &cpuinfo->softirq);

	fclose(fd);
}

void getCpuRate(void)
{
	CPU_INFO cpu_stat1;
	CPU_INFO cpu_stat2;

	memset(&cpu_stat1, 0, sizeof(CPU_INFO));
	memset(&cpu_stat2, 0, sizeof(CPU_INFO));

	get_cpu_occupy((CPU_INFO *)&cpu_stat1);
	sleep(1);
	get_cpu_occupy((CPU_INFO *)&cpu_stat2);	
	gCpuRate = cal_cpu_occupy((CPU_INFO *)&cpu_stat1, (CPU_INFO *)&cpu_stat2);	
	//printf("[SD_CARD] gCpuRate = %f\n", gCpuRate);
	
	return;
}

也可以利用ps命令来查看该进程下各线程的cpu占用率:

查看某个具体线程的CPU占用率,可用ps命令 ./ps -L c -e -o pid,tid,pcpu,cmd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值