linuxc程序获取cpu使用率及内存使用情况.docx

上传人:b****2 文档编号:2049210 上传时间:2022-10-26 格式:DOCX 页数:12 大小:49.39KB
下载 相关 举报
linuxc程序获取cpu使用率及内存使用情况.docx_第1页
第1页 / 共12页
linuxc程序获取cpu使用率及内存使用情况.docx_第2页
第2页 / 共12页
linuxc程序获取cpu使用率及内存使用情况.docx_第3页
第3页 / 共12页
linuxc程序获取cpu使用率及内存使用情况.docx_第4页
第4页 / 共12页
linuxc程序获取cpu使用率及内存使用情况.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

linuxc程序获取cpu使用率及内存使用情况.docx

《linuxc程序获取cpu使用率及内存使用情况.docx》由会员分享,可在线阅读,更多相关《linuxc程序获取cpu使用率及内存使用情况.docx(12页珍藏版)》请在冰豆网上搜索。

linuxc程序获取cpu使用率及内存使用情况.docx

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

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

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

方法就是读取proc下的文件来获取了。

cpu使用率:

  /proc/stat,内存使用情况:

    /proc/meminfo

看程序:

/***************************************************************

*   @file:

      statusinfo.c

*

*   @brief:

      从linux系统获取cpu及内存使用情况

*

*   @version   1.0

*

*   @author      抹黑

*

*   @date      2009年3月17日

*

***************************************************************/

typedefstructPACKED        //定义一个cpu

}MEM_OCCUPY;

get_memoccupy(MEM_OCCUPY*mem)//对无类型get函数含有一个形参结构体类弄的指针O

{

   FILE*fd;          

   intn;             

   charbuff[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

}

intcal_cpuoccupy(CPU_OCCUPY*o,CPU_OCCUPY*n) 

{   

   unsignedlongod,nd;    

   unsignedlongid,sd;

   intcpu_use=0;   

    

   od=(unsignedlong)(o->user+o->nice+o->system+o->idle);//第一次(用户+优先级+系统+空闲)的时间再赋给od

   nd=(unsignedlong)(n->user+n->nice+n->system+n->idle);//第二次(用户+优先级+系统+空闲)的时间再赋给od

      

   id=(unsignedlong)(n->user-o->user);   //用户第一次和第二次的时间之差再赋给id

   sd=(unsignedlong)(n->system-o->system);//系统第一次和第二次的时间之差再赋给sd

   if((nd-od)!

=0)

   cpu_use=(int)((sd+id)*10000)/(nd-od);//((用户+系统)乖100)除(第一次和第二次的时间差)再赋给g_cpu_used

   elsecpu_use=0;

   //printf("cpu:

%u\n",cpu_use);

   returncpu_use;

}

get_cpuoccupy(CPU_OCCUPY*cpust)//对无类型get函数含有一个形参结构体类弄的指针O

{   

   FILE*fd;         

   intn;            

   charbuff[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);     

}

intmain()

{

   CPU_OCCUPYcpu_stat1;

   CPU_OCCUPYcpu_stat2;

   MEM_OCCUPYmem_stat;

   intcpu;

    

   //获取内存

   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);

    

   return0;

}

 

linux下如何获取cpu的利用率

"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。

它以文件系统的方式为访问系统内核数据的操作提供接口。

用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。

"

  这里将介绍如何从/proc文件系统中获取与防火墙相关的一些性能参数,以及如何通过/proc文件系统修改内核的相关配置。

 

  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文件,或者其他随系统启动而执行的程序文件中。

 

  echo1>/proc/sys/net/ipv4/ip_forward

 

  echo1>/proc/sys/net/ipv4/icmp_echo_ignore_all

 

  如果需要获取其他的性能参数,或者需要对内核进行更多的配置,可以参考下面链接中的proc文件系统介绍,也可以直接通过manproc查看相关的信息。

 

  参考资料和相关链接

 

  [1]什么是proc文件系统

 

  

 

  [2]Linux下如何获取cpu的使用率

 

  

 

  [3]Exploringthe/proc/net/Directory

 

  

 

  [4]/proc/netintroduction

 

  

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1