千家信息网

Linux中怎么获取cpu利用率

发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,今天就跟大家聊聊有关Linux中怎么获取cpu利用率,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、从/proc文件系统获取相关的性能参数c
千家信息网最后更新 2025年01月25日Linux中怎么获取cpu利用率

今天就跟大家聊聊有关Linux中怎么获取cpu利用率,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1、从/proc文件系统获取相关的性能参数

cpu使用率: /proc/stat

内存使用情况: /proc/meminfo

网络负载信息: /proc/net/dev

相应的计算方法:(摘自:什么是proc文件系统,见参考资料)

(1) 处理器使用率

(2) 内存使用率

(3) 流入流出数据包

(4) 整体网络负载

这些数据分别要从/proc/stat、/proc/net/dev、/proc/meminfo三个文件中提取。如里有问题或对要提取的数据不太清楚,可以使用man proc来查看proc文件系统的联机手册。

(1) 处理器使用率

这里要从/proc/stat中提取四个数据:用户模式(user)、低优先级的用户模式(nice)、内核模式(system)以及空闲的处理器时间(idle)。它们均位于/proc/stat文件的***行。CPU的利用率使用如下公式来计算。

CPU利用率 = 100 *(user + nice + system)/(user + nice + system + idle)

(2) 内存使用率

这里需要从/proc/meminfo文件中提取两个数据,当前内存的使用量(cmem)以及内存总量(amem)。

内存使用百分比 = 100 * (cmem / umem)

(3)网络利用率

为了得到网络利用率的相关数据,需要从/proc/net/dev文件中获得两个数据:从本机输出的数据包数,流入本机的数据包数。它们都位于这个文件的第四行。

性能收集程序开始记录下这两个数据的初始值,以后每次获得这个值后均减去这个初始值即为从集群启动开始从本节点通过的数据包。

利用上述数据计算出网络的平均负载,方法如下:

平均网络负载 = (输出的数据包+流入的数据包) / 2

2. 通过/proc文件系统调整相关的内核配置

允许ip转发 /proc/sys/net/ipv4/ip_forward

禁止ping /proc/sys/net/ipv4/icmp_echo_ignore_all

可以在命令行下直接往上述两个"文件"里头写入"1"来实现相关配置,如果写入"0"将取消相关配置。不过在系统重启以后,这些配置将恢复默认设置,所以,如果想让这些修改生效,可以把下面的配置直接写入/etc/profile文件,或者其他随系统启动而执行的程序文件中。

echo 1 > /proc/sys/net/ipv4/ip_forward

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

这里计算cpu使用率是有问题的,需要使用上一状态的值来计算

正确的计算方法是,等上一个时间:

1、记录某个时刻cpu的使用情况

2、等上一个时间段

3、再记录此刻的cpu使用情况

4、计算总的时间片

把***次的所有cpu使用情况求和,得到j1

把第二次的所有cpu使用情况求和,得到j2

j2-j1得到这个时间段的所有时间片

即total=j2-j1=第二次的所有列的和-***次的所有列的和

5、计算idle时间

idle对应第五列的数据,用第二次的减去***次的即可

idle=第二次的第五列-***次的第五列

6、计算cpu使用率

rate=(total-idle)/total

在Linux/Unix下,CPU利用率分为用户态 ,系统态 和空闲态 ,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间。平时所说的CPU利用率是指:CPU执行非系统空闲进程的时间 / CPU总的执行时间 。

linux c程序获取cpu使用率及内存使用情况

2009-05-17 23:10

想获取一下目标机运行时linux系统的硬件占用情况,写了这几个小程序,以后直接用了。

方法就是读取proc下的文件来获取了。 cpu使用率: /proc/stat ,内存使用情况: /proc/meminfo

看程序 :

/***************************************************************  *    @file:        statusinfo.c  *  *    @brief:        从linux系统获取cpu及内存使用情况 *  *    @version    1.0  *  ***************************************************************/  typedef struct PACKED         //定义一个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  }CPU_OCCUPY;   typedef struct PACKED         //定义一个mem occupy的结构体 { char name[20];      //定义一个char类型的数组名name有20个元素 unsigned long total;   char name2[20];  unsigned long free;                         }MEM_OCCUPY;   get_memoccupy (MEM_OCCUPY *mem) //对无类型get函数含有一个形参结构体类弄的指针O  {      FILE *fd;                int n;                   char buff[256];         MEM_OCCUPY *m;      m=mem;                                                                                                                      fd = fopen ("/proc/meminfo", "r");               fgets (buff, sizeof(buff), fd);       fgets (buff, sizeof(buff), fd);       fgets (buff, sizeof(buff), fd);       fgets (buff, sizeof(buff), fd);       sscanf (buff, "%s %u %s", m->name, &m->total, m->name2);             fgets (buff, sizeof(buff), fd); //从fd文件中读取长度为buff的字符串再存到起始地址为buff这个空间里       sscanf (buff, "%s %u", m->name2, &m->free, m->name2);             fclose(fd);     //关闭文件fd  }   int cal_cpuoccupy (CPU_OCCUPY *o, CPU_OCCUPY *n)   {         unsigned long od, nd;          unsigned long id, sd;      int cpu_use = 0;               od = (unsigned long) (o->user + o->nice + o->system +o->idle);//***次(用户+优先级+系统+空闲)的时间再赋给od      nd = (unsigned long) (n->user + n->nice + n->system +n->idle);//第二次(用户+优先级+系统+空闲)的时间再赋给od              id = (unsigned long) (n->user - o->user);    //用户***次和第二次的时间之差再赋给id      sd = (unsigned long) (n->system - o->system);//系统***次和第二次的时间之差再赋给sd      if((nd-od) != 0)      cpu_use = (int)((sd+id)*10000)/(nd-od); //((用户+系统)乖100)除(***次和第二次的时间差)再赋给g_cpu_used      else cpu_use = 0;      //printf("cpu: %u/n",cpu_use);      return cpu_use;  }   get_cpuoccupy (CPU_OCCUPY *cpust) //对无类型get函数含有一个形参结构体类弄的指针O  {         FILE *fd;               int n;                  char buff[256];       CPU_OCCUPY *cpu_occupy;      cpu_occupy=cpust;                                                                                                                       fd = fopen ("/proc/stat", "r");       fgets (buff, sizeof(buff), fd);            sscanf (buff, "%s %u %u %u %u", cpu_occupy->name, &cpu_occupy->user, &cpu_occupy->nice,&cpu_occupy->system, &cpu_occupy->idle);            fclose(fd);       }   int main()  {      CPU_OCCUPY cpu_stat1;      CPU_OCCUPY cpu_stat2;      MEM_OCCUPY mem_stat;      int cpu;            //获取内存     get_memoccupy ((MEM_OCCUPY *)&mem_stat);            //***次获取cpu使用情况     get_cpuoccupy((CPU_OCCUPY *)&cpu_stat1);      sleep(10);            //第二次获取cpu使用情况     get_cpuoccupy((CPU_OCCUPY *)&cpu_stat2);            //计算cpu使用率     cpu = cal_cpuoccupy ((CPU_OCCUPY *)&cpu_stat1, (CPU_OCCUPY *)&cpu_stat2);            return 0;  }

看完上述内容,你们对Linux中怎么获取cpu利用率有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

时间 系统 数据 文件 情况 使用率 内存 利用率 用户 类型 空闲 网络 程序 配置 两个 方法 符号 结构 优先级 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 辽宁任务态势系统软件开发 windows远控软件开发 华为服务器品牌企业 万达网络科技集团实业互联网 网络安全信息技术值得学习吗 信息发布流媒体服务器有什么用 数据库查询平均工资的语法 网络安全手抄报三年级下册没有字 小学开展网络安全法工作方案 眼镜行业软件开发一般哪家好 万方数据库上传信息有错 普陀区营销软件开发程序 大连市软件开发中专 ec数据库是什么意思 网络安全哪个国家最强 我的世界网易版服务器导出地图 秦淮区专业app软件开发 梦幻手游嘉年华服务器何时开启的 博看数据库采购需求 诸城关文网络技术有限公司 网络安全违法犯罪案例 4u服务器是什么样的电脑 哪里有软件开发培训 招聘网络技术工程师 音乐软件开发项目报告总结 降噪软件开发包 怎么在数据库中删掉数据 数据库原理与应用刘先锋 上海中通吉网络技术有限 阿里云云数据库备份的怎么下载
0