当前位置:  技术问答>linux和unix

如何获取CPU利用率?

    来源: 互联网  发布时间:2015-11-09

    本文导语:  在各论坛搜了两天了,有说从loadavg文件获取的,也有说从stat文件获取的。关键是loadavg文件中给出的是1分钟,5分钟,15分钟的平均进程负载,该怎么用这三个数计算CPU利用率我还不明白。 至于stat文件,说是两次读...

在各论坛搜了两天了,有说从loadavg文件获取的,也有说从stat文件获取的。关键是loadavg文件中给出的是1分钟,5分钟,15分钟的平均进程负载,该怎么用这三个数计算CPU利用率我还不明白。

至于stat文件,说是两次读取stat文件数据再计算,在一个网站上看到了计算方法,但我得出的结果总是0,因为前三个数总是相同的,我两次读取stat的文件的时间间隔分别取过1到5秒,结果都一样。是不是要间隔几分钟呢?我不知道。

有知道的大侠请指点一下。3ks

|
头文件
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


#define _ULL unsigned long long
int FiveCpuNumbers(_ULL *uret,_ULL *nret,_ULL *sret,_ULL *iret,_ULL *iowait);
int ReadCpuInfo(float &fCpuUsage);
int GetMemUsage();



|
#define SET_IF_DESIRED(x,y)  if(x) *(x) = (y)
#define _ULL unsigned long long

int FiveCpuNumbers(_ULL *uret,_ULL *nret,_ULL *sret,_ULL *iret,_ULL *iowait)
{
static _ULL u = 0, m = 0, s = 0, i = 0, iw = 0;
_ULL user_j, nice_j, sys_j, idle_j, iowait_j = 0;
FILE *fp;
size_t byte_read;
char buffer[100];

fp = fopen("/proc/stat", "r");
byte_read = fread(buffer, 1, sizeof(buffer)-1, fp);
fclose(fp);

if (byte_read==0 || byte_read==sizeof(buffer))
return -1;
buffer[byte_read] = '';

sscanf(buffer, "cpu %Lu %Lu %Lu %Lu %Lu", &user_j, &nice_j, &sys_j, &idle_j, &iowait_j);
SET_IF_DESIRED(uret, user_j - u);
SET_IF_DESIRED(nret, nice_j - m);
SET_IF_DESIRED(sret, sys_j - s);
/* Idle can go backwards one tick due to kernel calculation issues */
SET_IF_DESIRED(iret, (idle_j > i) ? (idle_j - i) : 0);
SET_IF_DESIRED(iowait, iowait_j - iw);
u = user_j;
m = nice_j;
s = sys_j;
i = idle_j;
iw = iowait_j;
printf("cpu %Lu %Lu %Lu %Lu %Lu n",user_j,nice_j,sys_j,idle_j,iowait_j);

return 0;
}

/*
 * get the cpu usage
 */
int ReadCpuInfo(float &fCpuUsage)
{
float cpu_usage;
_ULL user_j, nice_j, sys_j, idle_j, iowait_j = 0;

if(FiveCpuNumbers(&user_j, &nice_j, &sys_j, &idle_j, &iowait_j)!=0)
return -1;
usleep(500000);
if(FiveCpuNumbers(&user_j, &nice_j, &sys_j, &idle_j, &iowait_j)!=0)
return -1;
usleep(500000);
if(FiveCpuNumbers(&user_j, &nice_j, &sys_j, &idle_j, &iowait_j)!=0)
return -1;

cpu_usage = (idle_j * 100.0) / (user_j + nice_j + sys_j + idle_j + iowait_j);

if (cpu_usage>100)
cpu_usage = 100.0;

/* change to useage */
cpu_usage = 100.0 - (cpu_usage);
     printf("### CPU Usage : %0.3f %%n", cpu_usage);
return 0;
}
#undef _ULL

/*
 * get the mm usage
 */
int GetMemUsage()
{
float memusage;
FILE *fp;
char buffer[1024];
size_t byte_read;
char *pos;
int totalmem;
int freemem;

fp = fopen("/proc/meminfo", "r");
byte_read = fread(buffer, 1, sizeof(buffer), fp);
fclose(fp);

if (byte_read==0 || byte_read==sizeof(buffer))
return -1;
buffer[byte_read] = '';
pos = strstr(buffer, "MemTotal:");
if (NULL==pos) 
return -1;
sscanf(pos, "MemTotal:       %d kB", &totalmem);
pos = strstr(pos, "MemFree:");
if (NULL==pos) 
return -1;
sscanf(pos, "MemFree:       %d kB", &freemem);
memusage = (totalmem-freemem)  * 100.0 / totalmem;
// printf("### MemUsage(total:%d free:%d %MEM:%3.2f%)n", totalmem, freemem, memusage);
    
        return 0;
}

|
stat文件是一直在变的,怎么可能1-5秒都不变呢

|
简单:
用prstat就可以!

|
用vmstat命令

    
 
 

您可能感兴趣的文章:

  • 急急急,请问如何获得Cpu利用率,可以用libproc.so这个库获取吗?
  • 如何编程获取HP-UNIX 磁盘IO利用率,磁盘I/O所占用的时间,
  • 在(Redhat)Linux 下怎样获取CPU利用率和Apache 服务器的连接数?
  • linux下如何获取cpu的利用率??或用什么系统调用?
  • 利用sender的Parent获取GridView中的当前行(获取gridview的值)
  • 利用jb组件pop,如何获取邮件头部信息
  • php利用腾讯ip分享计划获取地理位置示例分享
  • php利用新浪接口查询ip获取地理位置示例
  • java利用htmlparser获取html中想要的代码具体实现
  • 如何利用NetworkInterface获取服务器MAC地址
  • 利用fork 与 dup2 执行 系统命令, 别的命令都可以获取执行结果,就fdisk 命令不可以. execve("/sbin/fdisk",args,NULL) , args 命令参数.
  • c#反射机制学习和利用反射获取类型信息
  • 探讨SQL利用INFORMATION_SCHEMA系统视图如何获取表的主外键信息
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python获取网页编码的方法及示例代码
  • linux不用命令方式读文件获取网络流量,如何使用C函数调用获取网络流量信息?
  • java Servlet获取和设置cookie实例代码
  • 关于获取在jsp上获取客户端时间的问题
  • Python通过正则表达式获取,去除(过滤)或者替换HTML标签的几种方法
  • 关于Ganglia中的gmond组件收集到的资源信息如何获取(如何获取telnet后返回的信息)
  • php获取访客ip地址原理及提供七段代码供参考
  • java获取系统路径字体、得到某个目录下的所有文件名、获取当前路径
  • php获取本机ip地址 php获取远程IP地址
  • linux获取主机名后用gethostbyname() 不能获取主机ip
  • javascript 获取url参数的正则表达式(用来获取某个参数值)
  • 在gtk下,怎样获取系统时间??怎样获取当前的目录路径???
  • C++获取文件哈希值(hash)和获取torrent(bt种子)磁力链接哈希值
  • linux根据pid获取进程名和获取进程pid(c语言获取pid)
  • Shell获取系统时间问题
  • android 如何获取MCC/MNC控制小区广播的开启
  • 新手问题:Linux下如何获取进程占用的系统资源
  • c++如何获取当前进程名
  • 怎么通过snmp获取远程主机指定进程信息?
  • C#获取路径的多种方法
  • 怎样获取终端的所有打印消息


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3