社区
Linux/Unix社区
帖子详情
如何获取CPU利用率?
thirdlee
2006-02-16 09:41:42
在各论坛搜了两天了,有说从loadavg文件获取的,也有说从stat文件获取的。关键是loadavg文件中给出的是1分钟,5分钟,15分钟的平均进程负载,该怎么用这三个数计算CPU利用率我还不明白。
至于stat文件,说是两次读取stat文件数据再计算,在一个网站上看到了计算方法,但我得出的结果总是0,因为前三个数总是相同的,我两次读取stat的文件的时间间隔分别取过1到5秒,结果都一样。是不是要间隔几分钟呢?我不知道。
有知道的大侠请指点一下。3ks
...全文
171
7
打赏
收藏
如何获取CPU利用率?
在各论坛搜了两天了,有说从loadavg文件获取的,也有说从stat文件获取的。关键是loadavg文件中给出的是1分钟,5分钟,15分钟的平均进程负载,该怎么用这三个数计算CPU利用率我还不明白。 至于stat文件,说是两次读取stat文件数据再计算,在一个网站上看到了计算方法,但我得出的结果总是0,因为前三个数总是相同的,我两次读取stat的文件的时间间隔分别取过1到5秒,结果都一样。是不是要间隔几分钟呢?我不知道。 有知道的大侠请指点一下。3ks
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
thirdlee
2006-02-17
打赏
举报
回复
stat文件是一直在变,但是关于CPU的前三个数两次读出来的值没变,第四个数倒是在变.
prstat是程序还是文件啊,我没找到啊.(抱歉,这个问题可能比较弱智,但我实在是不知道啊,接触LINUX少,结果现在要写这个.)
sunruyu
2006-02-17
打赏
举报
回复
简单:
用prstat就可以!
cym64039
2006-02-17
打赏
举报
回复
stat文件是一直在变的,怎么可能1-5秒都不变呢
lvsc
2006-02-17
打赏
举报
回复
用vmstat命令
Mybox
2006-02-17
打赏
举报
回复
后面一个是获取内存使用的
Mybox
2006-02-17
打赏
举报
回复
#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] = '\0';
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] = '\0';
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;
}
Mybox
2006-02-17
打赏
举报
回复
头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define _ULL unsigned long long
int FiveCpuNumbers(_ULL *uret,_ULL *nret,_ULL *sret,_ULL *iret,_ULL *iowait);
int ReadCpuInfo(float &fCpuUsage);
int GetMemUsage();
WindowsVC++
获取
CPU
整体使用率
《Windows系统
CPU
内存网络性能统计第二篇
CPU
CPU
整体使用率》 ...配套程序。 讲解了在Windows系统下使用VC++
获取
系统
CPU
整体使用率。已经测试,能运行于WinXP和Win7系统。
如何正确
获取
容器的
CPU
利用率
?
第一个问题:如何正确地
获取
容器中的
cpu
利用率
?在上一篇《Linux 中的各项
CPU
利用率
是这样算出来的!》中我们讨论了 Linux 是如何计算系统的
cpu
利用率
。在物理机上,使用这种方法查看
cpu
的使用情况是没有...
批处理中如何提高
CPU
利用率
?
在批处理中追求吞吐量,所以对
CPU
的
利用率
要求很高,这里有2种可以提高
CPU
利用率
的技术。 一是代码生成技术(CodeGen),二是
CPU
亲和技术。 补充 CodeGen 拿 Spark 举例说明,Spark1.5版本中更新较大的是DataFrame...
matlab
cpu
使用率达不到100,如何在循环运行MATLAB代码时提高
CPU
利用率
?
我有一个耗时运行的代码,因为它包含一些...如何在循环运行MATLAB代码时提高
CPU
利用率
? 为什么不利用至少25%的
CPU
,因为我的
CPU
是四核(我认为每个核心处理1个线程在同一时间,是不是?),默认情况下,当没有做别的...
深入理解并编程
获取
CPU
利用率
CPU
利用率
是衡量
CPU
工作负载的指标,表示
CPU
在执行任务时的时间百分比。在IT领域,监控
CPU
利用率
是性能...对于
获取
CPU
利用率
而言,系统API为我们提供了一种直接且高效的方法。例如,在Unix和类Unix系统中,sysconf()
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章