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

物理内存使用率过高  时间:2021-01-15  阅读:()

想获取一下目标机运行时l inux系统的硬件占用情况写了这几个小程序 以后直接用了。方法就是读取proc下的文件来获取了。 cpu使用率 /proc/stat  内存使用情况 /p roc/me mi nfo

看程序

**************************************************************

* @fi le: statusinfo.c

*

* @brief: 从l inux系统获取cpu及内存使用情况

*

* @version 1 .0

*

* @author 抹黑

*

* @date 2009年3月17日

*

**************************************************************typedef struct PACKED //定义一个cpu occupy的结构体

{char name[20]; //定义一个char类型的数组名name有20个元素unsigned intuser; //定义一个无符号的int类型的user unsigned intnice; //定义一个无符号的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;intn;char buff[256];

MEM_OCCUPY*m;m=mem;fd=fo pen ("/proc/me mi nfo", "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);fg ets(b uff,sizeof(b uff), fd); //从fd文件中读取长度为b uff的字符串再存到起始地址为buff这个空间里sscanf (buff, "%s%u",m->name2,&m->free,m->name2);fc l o s e(fd); //关闭文件fd

}int cal_cpuoccupy(CPU_OCCUPY*o,CPU_OCCUPY*n)

{unsigned long od, nd;unsignedlong 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;intn;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);fc l o s e(fd);

}intmain()

{

CPU_OCCUPY cpu_stat1 ;

CPU_OCCUPY cpu_stat2;

MEM_OCCUPY mem_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);return 0;

}l inux下如何获取cpu的利用率

"proc文件系统是一个伪文件系统它只存在内存当中而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过p roc得到系统的信息并可以改变内核的某些参数。 "

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

1 、从/p roc文件系统获取相关的性能参数cpu使用率 /proc/stat

内存使用情况 /p roc/me mi nfo

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

相应的计算方法 (摘自什么是p roc文件系统见参考资料)

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.通过/p roc文件系统调整相关的内核配置

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

禁止ping /proc/sys/net/ipv4/icmp_echo_ignore_al l

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

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

参考资料和相关链接

[1]什么是proc文件系统http://blog.chinaunix.net/u1/37836/showart_.html

[2]Linux下如何获取cpu的使用率http://topic.csdn.net/t//23/.html

[3]Exploring the/proc/net/Directory l inuxdevcenter.com/pub/a/l inux/2000/1 1/16/LinuxAdmin.html?page=1">http://www. l inuxd evcenter.com/pub/a/l inux/2000/1 1/16/LinuxAdmin.html?page=1

[4] /proc/net introduction http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/en-US/Reference_Guid e/s2-proc-dir-net.html

[5]使用ul imit和proc去调整系统参数http://www. l inuxfly.org/post/73.htm

注文件里面是一个增量每过一个时间间隔对应的项使用了CPU都会有增加要算百分比得用上上一次的状态值.

这里计算cpu使用率是有问题的需要使用上一状态的值来计算。返回elf发表于2007-1 1-1609:06 #4

正确的计算方法是等上一个时间

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

2、等上一个时间段

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

4、计算总的时间片

把第一次的所有cpu使用情况求和得到j1

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

江苏云服务器 2H2G 20M 79元/月 大宽带159元/月 高性能挂机宝6元/月 香港CN2 GIA、美国200G防御 CN2 GIA 折后18元/月 御速云

介绍:御速云成立于2021年的国人商家,深圳市御速信息技术有限公司旗下品牌,为您提供安全可靠的弹性计算服务,随着业务需求的变化,您可以实时扩展或缩减计算资源,使用弹性云计算可以极大降低您的软硬件采购成本,简化IT运维工作。主要从事VPS、虚拟主机、CDN等云计算产品业务,适合建站、新手上车的值得选择,拥有华东江苏、华东山东等国内优质云产品;香港三网直连(电信CN2GIA联通移动CN2直连);美国高...

飞讯云E5-2678V3 64GB,湖北十堰100G高防物理机330元/月

飞讯云官网“飞讯云”是湖北飞讯网络有限公司旗下的云计算服务品牌,专注为个人开发者用户、中小型、大型企业用户提供一站式核心网络云端部署服务,促使用户云端部署化简为零,轻松快捷运用云计算。飞讯云是国内为数不多具有ISP/IDC双资质的专业云计算服务商,同时持有系统软件著作权证书、CNNIC地址分配联盟成员证书,通过了ISO27001信息安全管理体系国际认证、ISO9001质量保证体系国际认证。 《中华...

易探云:香港CN2云服务器低至18元/月起,183.60元/年

易探云怎么样?易探云最早是主攻香港云服务器的品牌商家,由于之前香港云服务器性价比高、稳定性不错获得了不少用户的支持。易探云推出大量香港云服务器,采用BGP、CN2线路,机房有香港九龙、香港新界、香港沙田、香港葵湾等,香港1核1G低至18元/月,183.60元/年,老站长建站推荐香港2核4G5M+10G数据盘仅799元/年,性价比超强,关键是延迟全球为50ms左右,适合国内境外外贸行业网站等,如果需...

物理内存使用率过高为你推荐
国际域名注册如何在国外域名注册商注册国际域名哩域名注册网注册域名上哪个网站最好虚拟主机推荐虚拟主机哪个好免费虚拟主机申请免费域名和免费虚拟主机申请以及绑定求详解便宜的虚拟主机低价虚拟主机那种类型的好呢?台湾主机台湾的电脑硬件比韩国,日本,美国强?虚拟空间免费试用目前哪里有免费试用的虚拟主机 或者服务器用啊?万网虚拟主机万网,云服务器和与虚拟主机有什么区别?我是完全不知到的那种,谢谢。用前者还是后者合适。怎么做网页。apache虚拟主机为何apache要配置虚拟主机虚拟主机测评哪一种虚拟主机比较好用?
a5域名交易 raksmart 申请个人网页 免费ftp空间申请 卡巴斯基永久免费版 ibox官网 网站卫士 空间技术网 香港新世界中心 国外ip加速器 Updog 英雄联盟台服官网 免费网络 免费个人主页 789电视剧网 nnt winds cdn加速 dbank 电脑主机 更多