获取系统cpu使用率(linux C)


typedef struct cpu_occupy_ //定义一个cpu occupy的结构体
{
char name[20]; //定义一个char类型的数组名name有20个元素
unsigned int user; //定义一个无符号的int类型的user
unsigned int nice; //定义一个无符号的int类型的nice
unsigned int system; //定义一个无符号的int类型的system
unsigned int idle; //定义一个无符号的int类型的idle
unsigned int iowait;
unsigned int irq;
unsigned int softirq;
}cpu_occupy_t;

double cal_cpuoccupy (cpu_occupy_t *o, cpu_occupy_t *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);//第一次(用户+优先级+系统+空闲)的时间再赋给od
nd = (double) (n->user + n->nice + n->system +n->idle+n->softirq+n->iowait+n->irq);//第二次(用户+优先级+系统+空闲)的时间再赋给od

id = (double) (n->idle); //用户第一次和第二次的时间之差再赋给id
sd = (double) (o->idle) ; //系统第一次和第二次的时间之差再赋给sd
if((nd-od) != 0)
cpu_use =100.0 - ((id-sd))/(nd-od)*100.00; //((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used
else
cpu_use = 0;
return cpu_use;
}

void get_cpuoccupy (cpu_occupy_t *cpust)
{
FILE *fd;
int n;
char buff[256];
cpu_occupy_t *cpu_occupy;
cpu_occupy=cpust;

fd = fopen ("/proc/stat", "r");
if(fd == NULL)
{
perror("fopen:");
exit (0);
}
fgets (buff, sizeof(buff), fd);

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

fclose(fd);
}

double get_sysCpuUsage()
{
cpu_occupy_t cpu_stat1;
cpu_occupy_t cpu_stat2;
double cpu;
get_cpuoccupy((cpu_occupy_t *)&cpu_stat1);
sleep(1);

//第二次获取cpu使用情况
get_cpuoccupy((cpu_occupy_t *)&cpu_stat2);

//计算cpu使用率
cpu = cal_cpuoccupy ((cpu_occupy_t *)&cpu_stat1, (cpu_occupy_t *)&cpu_stat2);

return cpu;
}

原文地址:http://blog.51cto.com/qiaopeng688/2140580

时间: 2024-08-29 03:35:51

获取系统cpu使用率(linux C)的相关文章

Java获取Linux系统cpu使用率

原文:http://www.open-open.com/code/view/1426152165201 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Li

嵌入式 如何定位死循环或高CPU使用率(linux)

如何定位死循环或高CPU使用率(linux) 确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |grep xxx 得到如下结果,其中线程2909使用了7.8%的CPU. 2907 2913 0.0 ./xxx 2907 2909 7.8 ./xxx 也可以通过查看/proc中的信息来确定高CPU线程. 打印了4列,线程ID,线程名,用户时间和内核时间

Java 获取系统cpu 内存

原文链接:https://blog.csdn.net/CallMeV6/article/details/83176840 说明:获取的数据是操作系统整体的资源占用情况,不是当前 java进程占用的资源 1. 获取系统CPU占用情况 : import java.lang.management.ManagementFactory; import com.sun.management.OperatingSystemMXBean; private static OperatingSystemMXBean

Java如何获取系统cpu、内存、硬盘信息

1 概述 前段时间摸索在Java中怎么获取系统信息包括cpu.内存.硬盘信息等,刚开始使用Java自带的包进行获取,但这样获取的内存信息不够准确并且容易出现找不到相应包等错误,所以后面使用sigar插件进行获取.下面列举出了这两种方式获取系统信息的方式及代码. 2 使用Java自带包获取系统信息 2.1 使用Java自带包获取系统信息代码如下: 2.1.1 Bytes.java public class Bytes { public static String substring(String

zabbix添加对centos系统cpu使用率百分比的监控

cpu使用率key: system.cpu.util[] 原文地址:https://www.cnblogs.com/reblue520/p/9302329.html

Linux c 获取cpu使用率(2)

上一篇博文当中,我们谈论了在Linux中如何获取执行命令行的结果,最终得到cpu的 使用率,但是十分不幸的事情是: 1)通过top -n 1 | grep Cpu获取的cpu使用率不会刷新,每次读取结果只能够得到第一次执行的结果. 2)可能导致SIGNAL上的冲突 新的代码的解决原理: 通过读取/proc/stat中的数据计算得出cpu的使用率 #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #i

关于linux系统CPU篇---&gt;CPU使用率升高

1.CPU使用率为单位时间内CPU使用情况的统计,以百分比的方式展示. LINUX作为一个多任务操作系统,将每个CPU的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉 2.如何查看CPU使用率? TOP和PS是最常用的性能分析工具.TOP显示了系统总体的CPU和内存使用情况,以及各个进程的资源使用情况 PS则只显示了每个进程的资源使用情况 pidstat是专门分析每个进程的CPU使用情况的工具 TOP输出: # 默认每 3 秒刷新一次$ toptop -

Linux系统CPU的性能监控及调优

前言: 性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢.接口超时,服务器负载高.并发数低,数据库频繁死锁等.尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来. 在系统层面能够影响应用性能的一般包括三个因素:CPU.内存和IO,今天,我们先谈谈CPU性能的监控以及调优. CPU性能监控 当程序响应变慢的时候,首先使用top.vmstat.ps等命令查看系统的cpu使用率是否有异常,从而可以判断出是否是cpu繁忙造成的性能问题

Linux性能优化实战:负载均衡与CPU使用率(01)

一.CPU使用率并没有直接关系 1.平均负载 单位时间内,系统处于可运行状态和不可终端状态的平均进程数也就是平均活跃进程数,它和cpu使用率并没有直接关系, 可运行状态: 正在使用的cpu或者正在等待cpu的进程 不可中断状态 进程是正处于内核关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备I/O响应,也就是我们在ps命令中看到的D状态的状态 或者中断打断的 ,这个时候的 进程处于不可终端状态,如果此时的进程被打断了 ,就容易出现磁盘数据与进程不一致的 问题 所以,不可中断